gettextf和sprintf之间的区别

时间:2014-05-24 13:20:15

标签: r printf

我已阅读gettextfsprintf的{​​{3}}。这两个似乎给出了相同的结果:

sprintf("%f", pi) == gettextf("%f", pi)
sprintf("%.3f", pi) == gettextf("%.3f", pi)
sprintf("%1.0f", pi) == gettextf("%1.0f", pi)
sprintf("%5.1f", pi) == gettextf("%5.1f", pi)
sprintf("%G", 1e-6 * pi) == gettextf("%G", 1e-6 * pi)

文档说明:

  

sprintf是系统sprintf C库函数的包装器。尝试检查传递的值的模式是否与提供的格式匹配,并且正确处理R的特殊值(NA,Inf,-Inf和NaN)。

     

gettextf是一个便利函数,它提供C风格的字符串格式,并可能转换格式字符串。

我试图理解这两个功能之间的实际差异在于前一年级老师能够理解的内容。

我的理解是sprintf实际上使用了系统函数,其中gettextf模仿了格式化。 gettextf可跨平台移植吗?

修改

gettextf的来源表示它使用sprintf

> gettextf
function (fmt, ..., domain = NULL) 
sprintf(gettext(fmt, domain = domain), ...)
<bytecode: 0x0706831c>
<environment: namespace:base>

1 个答案:

答案 0 :(得分:3)

他们了解gettextf()可能有用的关键是关注gettext的链接。

这些是用于通常称为 i18n 或国际化的输出函数,即当您想要自动让您的(错误)消息显示由您甚至不知道的人提供的翻译版本时。

系统发现您要打印“foo not a bar for bar”,然后其他一些人可以提供翻译的消息以供非英语使用。在显示时,在po文件中查找匹配,并在可用的地方显示合适的翻译消息。这种行为在R本身很常见,但在CRAN包中有些罕见,通常没有po文件。