我希望格式化具有动态位数的数字向量,如另一个向量中指定的那样。 format
仅使用digits
向量的第一个元素。有没有办法对此进行矢量化?
示例:
format(c(0.15, 0.43), digits=c(1, 2))
# [1] "0.1" "0.4"
# Expected: c("0.1", "0.43")
答案 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
,就像千位分隔符一样。