sprintf:使用C样式字符串格式命令

把格式数据写成串R文件

使用C样式字符串格式命令

描述

C函数的包装器把格式数据写成串,它返回一个字符包含文本和变量值的格式化组合的向量。

用法

冲刺(fmt,…)gettextf(fmt,…,domain=NULL)

论据

柔性制造技术

格式字符串的字符向量,每个字符串最多8192个字节。

...

要传递到的值柔性制造技术。仅逻辑,支持整数、实数和字符向量,但有些强制将完成:请参阅“详细信息”部分。最多100个。

领域

看见获取文本.

细节

把格式数据写成串是系统的包装器把格式数据写成串C库功能。尝试检查值的模式通过的与提供的格式匹配,以及R(右)的特殊值(不适用Inf公司-Inf公司NaN公司)正确处理。

gettextf(获取文本)是一个提供C样式的便利函数使用格式字符串的可能翻译进行字符串格式设置。

参数(包括柔性制造技术)如果可能的话,全部回收最长长度的次数,然后是格式并行完成。允许零长度参数,并将给出零长度结果。即使未使用,也会计算所有参数,并且因此,有些类型(例如。,“符号”“语言”,请参阅类型)不允许。未使用的参数柔性制造技术导致警告。(格式%.0s个可用于“跳过”一个参数。)

以下内容摘自Kernighan和Ritchie(参见参考):但实际实施将遵循C99标准和精细的细节(尤其是用户错误下的行为)可能取决于平台。对编号参数的引用来自POSIX。

字符串柔性制造技术包含普通字符,传递到输出字符串,以及转换对通过提供的参数进行操作的规范...。允许的转换规范以%以集合中的一个字母结尾aAdifeEgGosxX%。这些字母表示以下类型:

d日o个x个X(X)

整数值,o个八进制,x个X(X)十六进制(对a-f型作为代码)。具有正整数的数字变量值将被强制为整数。格式d日也可以用于逻辑变量,这些变量将被转换为01不适用.

(f)

双精度值,单位为“(f)固定的点“十进制表示法的形式”[-]mmm.ddd“。的数量小数位数(“d”)由精度指定:默认值为6;精度为0时,将不显示小数点。非有限值已转换为不适用NaN公司或者(也许后面跟着一个标志签署人)Inf公司.

e(电子)E类

双精度值,ine(电子)指数十进制表示法形式[-]m.ddde[+-]xx号[-]m.dddE[+-]xx号.

G公司

双精度值,in%e(电子)%E类如果指数小于-4或大于或,则设置格式等于精度,以及%(f)否则格式化。(精度(默认为6)指定重要的这里是数字,而在%f、 %e(%),是的小数点后的位数。)

一个

双精度值,二进制表示法表单的[-]0xh.hhhp[+-]天。这是一个二进制分数用十六进制乘以2的(十进制)幂表示。数字小数点后的十六进制数字由精度指定:默认值是足够的数字来精确表示内部二进制表示。非有限值转换为不适用NaN公司或者(也许后面跟着一个符号)Inf公司.格式%一个对使用小写x个第页和十六进制值:格式%A类使用大写字母。

这应该在所有平台上都受支持,因为它是C99的一个功能。格式不是唯一定义的:尽管这是可能的成为领先者小时总是零或一,这不是总是这样。大多数系统将抑制尾随零,但少数系统不要。在一个编写良好的平台上,对于正常数字在小数点前加一个前导数字(默认情况下)13十六进制数字,因此为53位。非规范化的处理(也称为“亚正常”)数字非常依赖于平台。

字符串。字符不适用已转换为“不适用”.

%

字面意义的%(没有额外的格式在这种情况下,允许使用下面给出的字符)。

转换依据作为字符用于非字符参数和依据as.双对于具有的非双精度参数f、 e、e、g、g注:长度为在转换之前确定,因此不要依赖内部强制,如果这会改变长度。强制仅完成一次,所以如果长度(fmt)>1那么所有元素都必须期望相同类型的参数。

此外,在初始%和终止转换字符可以按任何顺序:

最小值

由句点分隔的两个数字,表示字段宽度()和精度(n个).

-

在其字段中对转换的参数进行左调整。

+

始终打印带符号的数字:仅在默认情况下负数印有符号。

空间

如果第一个字符不是符号,则在空格前添加前缀。

0

对于数字,用前导填充到字段宽度零。对于字符,在某些平台上此零位是被别人忽视。

#

为数字指定“备用输出”,其动作取决于类型:对于x个X(X)0x个0倍将加前缀非零结果。对于e(电子)e(电子)(f)G公司,输出将始终具有小数点;对于G公司,不会删除尾部的零。

此外,紧接着%可能会来1$99$引用带编号的参数:这允许参数无序引用,主要用于错误消息。如果这样做,最好是所有格式numbered:如果不是,则未编号的参数将按顺序处理参数。请参阅示例。此符号允许参数的使用次数超过一次,在这种情况下,它们必须用作同一类型(整数,双精度或字符)。

字段宽度或精度(但不是两者)可以由星号*:在这种情况下,参数指定所需的数字。负字段宽度被视为“-”标志,后跟正字段宽度。负精度被视为省略了精度。参数应为整数,但为双精度参数将被强制为整数。

的元素限制为8192字节柔性制造技术、和上的单个字符串中包含的字符串%转换规范。

字段宽度和精度%秒转换被解释如C标准所述,表示为字节,而不是字符。

C双打用于R(右)数字向量有符号零把格式数据写成串可以输出为-0-0.000。。。。

价值

长度为最长输入的字符向量。如果有的元素柔性制造技术或任何字符参数声明为UTF-8,结果的元素将使用UTF-8格式,并具有编码声明为UTF-8。否则,它将位于当前区域设置中编码。

警告

格式字符串传递给操作系统把格式数据写成串功能,以及不正确的格式会导致后者崩溃R(右)过程。R(右)对格式执行健全性检查,但不是所有可能的用户所有平台上的错误都已经过测试,有些可能是终端错误。

此处未记录的输入行为“未定义”,这意味着它可以因平台而异。

作者

原始代码由Jonathan Rougier编写。

工具书类

Kernighan,B.W.和Ritchie,D.M.(1988)C编程语言。第二版,普伦蒂斯·霍尔。描述附录表B-1中的格式选项。

C标准,尤其是“C99”的ISO/IEC 9899:1999。链接可以在以下位置找到https://developer.r-project.org/Portability.html.

https://pubs.opengroup.org/onlinepubs/9699919799/functions/snprintf.html用于POSIX扩展,如带编号的参数。

男子短跑在Unix-like系统上。

另请参见

格式C用于格式化类似的时尚。

粘贴另一种创建向量组合的方法文本和值。

获取文本用于自动翻译的机制的文本。

示例

##注意格式:R中的大多数内容都是浮点##只有整数值的实数被强制为整数。sprintf(“%s是%f英尺高\n”,“Sven”,7.1)#OKtry(sprintf(“%s有%i英尺高”,“Sven”,7.1))#不正常sprintf(“%s有%i英尺高”,“Sven”,7)#OK##使用文字%:sprintf(“%.0f%%表示同意(在%.0f大小的样本中)”,66.666,3)##pi的各种格式:sprintf(“%f”,pi)sprintf(“%.3f”,圆周率)sprintf(“%1.0f”,圆周率)冲刺(“%5.1f”,圆周率)sprintf(“%05.1f”,圆周率)sprintf(“%+f”,圆周率)sprintf(“%f”,pi)sprintf(“%-10f”,圆周率)#左对齐sprintf(“%e”,pi)sprintf(“%E”,pi)sprintf(“%g”,pi)sprintf(“%g”,1e6*pi)#->指数sprintf(“%.9g”,1e6*pi)#->“固定”冲刺(“%G”,1e-6*pi)##无截断:sprintf(“%1.f”,101)##重复使用一个参数三次,显示%x和%x之间的差异xx<-sprintf(“%1$d%1$x%1$x”,0:15)xx<-矩阵(xx,dimnames=list(rep(“”,16),“%d%x%x”))noquote(格式(xx,justify=“right”))##更复杂:sprintf(“最小10-char字符串“%10s”,c(“a”、“ABC”和“更长的”)##qdapTools 1.0.0中与平台相关的错误示例:##可以用空格或零填充。sprintf(“%09s”,month.name)n<-1:18sprintf(paste0(“e with%2d digits=%.”,n,“g”),n,exp(1))##使用参数的顺序不正确sprintf(“第二个%2$1.0f,第一个%1$5.2f,第三个%3$1.0f”,pi,2,3)##使用星号表示宽度或精度sprintf(“精度%.*f,宽度'%*.3f'”,3,pi,8,pi)##星号和参数重复使用,“e”示例重申:sprintf(“带有%1$2d个数字的e=%2$.*1$g”,n,exp(1))##循环参数sprintf(“%s%d”,“测试”,1:3)##显示舍入/表示错误的二进制输出x<-序列(0,1.0,0.1);y<-c(0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1)cbind(x,sprintf(“%a”,x),sprindf(“%d”,y))