【发布时间】:2011-11-01 00:42:00
【问题描述】:
作为 R 的新手,曾经让我感到困惑的一件事是如何将数字格式化为用于打印的百分比。
例如,将0.12345 显示为12.345%。我有很多解决方法,但这些似乎都不是“对新手友好的”。例如:
set.seed(1)
m <- runif(5)
paste(round(100*m, 2), "%", sep="")
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"
sprintf("%1.2f%%", 100*m)
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"
问题:是否有基础 R 函数来执行此操作?或者,是否有广泛使用的包提供方便的包装器?
尽管在?format、?formatC 和?prettyNum 中搜索了类似的东西,但我还没有在基础R 中找到合适的包装器。??"percent" 没有产生任何有用的东西。 library(sos); findFn("format percent") 返回 1250 次点击 - 所以同样没用。 ggplot2 有一个函数 percent 但这无法控制舍入精度。
【问题讨论】:
-
sprintf似乎是邮件列表中最受欢迎的解决方案,我还没有看到更好的解决方案。无论如何调用任何内置函数都不会简单得多,对吧? -
在我看来,
sprintf非常适合同时也是程序员的 R 编码器子集。我一生中写过很多代码,包括 COBOL(不寒而栗)和 fortran(显示我的年龄)。但我不认为sprintf格式化规则很明显(翻译:WTF?)。当然,专用包装器必须比 sprintf 更容易调用,例如:format_percent(x=0.12345, digits=2) -
@hircus 我认为这很常见,值得拥有自己的短咖喱函数。这在 Sweave 中尤为突出,其中 \Sexpr{sprintf(%1.2f%%",myvar)} 比 \Sexpr{pct(myvar)} 或任何更短的函数都丑陋得多。
-
学习使用适当的工具不是我们应该期望用户努力的吗?我的意思是,学习使用
sprintf()并不比找出包foo 包含format_percent()更费时间。如果用户不想格式化为百分比而是其他类似的格式会发生什么?他们需要找到另一个包装器。从长远来看,学习基础工具将是有益的。 -
有一个小问题,
%是 LaTeX 中的注释字符,这是 R 的“默认”报告格式。因此,虽然它可能对标记图形有用,但必须小心如果格式化的数字要被编织。
标签: r formatting