gettextf和sprintf之间的区别

gettextf和sprintf之间的区别,r,printf,R,Printf,我已经阅读了gettextf和sprintf。这两者似乎给出了相同的结果: 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

我已经阅读了
gettextf
sprintf
。这两者似乎给出了相同的结果:

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-library函数的包装器。尝试检查传递的值的模式是否与提供的格式匹配,以及R的特殊值(NA、Inf、-Inf和NaN)是否正确处理

gettextf
是一个方便的函数,它提供了C风格的字符串格式,并可以对格式字符串进行翻译

我试图了解这两种功能之间的实际差异,一位前一年级教师可以理解

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

编辑

gettextf
的源表示它使用了
sprintf

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

他们了解
gettextf()
可能有用的关键是跟随到的链接

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


系统发现您想要打印“foo not a match for bar”,然后其他人可以提供非英语使用的翻译消息。在显示时,将在po文件中查找匹配项,并在可用的情况下显示适当的翻译消息。这种行为在R中很常见,但在CRAN软件包中有点罕见,因为它通常没有po文件。

谢谢Dirk。现在有道理了。