将数字arg矢量化为R中的format()

时间:2015-04-11 19:15:32

标签: r

我希望格式化具有动态位数的数字向量,如另一个向量中指定的那样。 format仅使用digits向量的第一个元素。有没有办法对此进行矢量化?

示例:

format(c(0.15, 0.43), digits=c(1, 2)) 
# [1] "0.1" "0.4" 
# Expected: c("0.1", "0.43")

2 个答案:

答案 0 :(得分:2)

而不是format(),您可以使用sprintf()

执行此操作
sprintf("%2$.*1$g", c(1, 2), c(0.15, 0.43))
# [1] "0.1"  "0.43"

这是基于?sprintf

中显示的一个示例
n <- 1:6
## Asterisk and argument re-use, 'e' example reiterated:
sprintf("e with %1$2d digits = %2$.*1$g", n, exp(1))
# [1] "e with  1 digits = 3"       "e with  2 digits = 2.7"    
# [3] "e with  3 digits = 2.72"    "e with  4 digits = 2.718"  
# [5] "e with  5 digits = 2.7183"  "e with  6 digits = 2.71828"

答案 1 :(得分:0)

Per akrun:

mapply(format, c(0.15, 0.43), digits=c(1,2))
#[1] "0.1" "0.43"

虽然这可能比Richard Scriven的sprintf建议慢,但它对我来说效果更好,因为我使用的format的其他部分不太适合sprintf,就像千位分隔符一样。