基本R语言
我更喜欢使用基本R语言中提供的sprintf
函数。
sprintf("%0.1f%%", .7293827 * 100)
[1] "72.9%"
我特别喜欢sprintf
,因为你还可以插入字符串。
sprintf("People who prefer %s over %s: %0.4f%%",
"Coke Classic",
"New Coke",
.999999 * 100)
[1] "People who prefer Coke Classic over New Coke: 99.9999%"
使用sprintf
在处理数据库配置等内容时非常有用;只需读取yaml文件,然后使用sprintf填充模板,而不需要大量使用paste0
。
更长的示例
当您有大量文本和许多值需要聚合时,此模式对于rmarkdown报告特别有用。
设置/聚合:
library(data.table)
approval <- data.table(year = trunc(time(presidents)),
pct = as.numeric(presidents) / 100,
president = c(rep("Truman", 32),
rep("Eisenhower", 32),
rep("Kennedy", 12),
rep("Johnson", 20),
rep("Nixon", 24)))
approval_agg <- approval[i = TRUE,
j = .(ave_approval = mean(pct, na.rm=T)),
by = president]
approval_agg
使用
sprintf
与文本和数字向量,仅输出换行符到
cat
。
approval_agg[, sprintf("%s approval rating: %0.1f%%",
president,
ave_approval * 100)] %>%
cat(., sep = "\n")
#
# Truman approval rating: 47.0%
# Eisenhower approval rating: 64.8%
# Kennedy approval rating: 70.8%
# Johnson approval rating: 55.5%
# Nixon approval rating: 48.6%
最后,为了方便我自己的参考,既然我们在讨论格式,这是我用基本R处理逗号的方法:
30298.78 %>% round %>% prettyNum(big.mark = ",")
[1] "30,299"
sprintf
对于那些同时也是程序员的 R 程序员而言完全可以胜任。我一生中写过很多代码,包括 COBOL(令人不寒而栗)和 FORTRAN(显露出我的年龄)。但我不认为sprintf
的格式规则是显而易见的(译者:WTF?)。当然,相对于sprintf
,一个专用的包装器更容易调用,例如:format_percent(x=0.12345, digits=2)
。 - Andriesprintf()
几乎不比找出包foo中是否包含format_percent()
更耗时。如果用户不想将格式设置为百分比,而是想要类似的其他格式,那么会发生什么?他们需要找到另一个封装器。从长远来看,学习基本工具将是有益的。 - Gavin Simpson