使用R中的format()格式化数字向量

6
当我尝试使用format()函数格式化数字向量时,“digits”参数只作用于第一个数字。
format(c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01),        
    digits = 3, scientific = FALSE)
[1] " 0.00000151" " 0.08487128" " 0.41850080" " 0.47851610" "-0.83325570"

然而,如果我依次将其应用于每个元素,则会得到预期的结果。
sapply(c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01), FUN = function(x) { format(x,digits = 3, scientific = FALSE) } )
[1] "0.00000151" "0.0849"     "0.419"      "0.479"      "-0.833"    

这里我是否漏掉了什么?

请注意,如果我将 scientific = FALSE,则所有数字都会正确格式化:

format(c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01),        
        digits = 3, scientific = TRUE)
" 1.51e-06" " 8.49e-02" " 4.19e-01" " 4.79e-01" "-8.33e-01"

我感到困惑,因为第一个例子中说 scientific = FALSE。我认为在最后一个例子中你的意思是 TRUE。 - Elin
谢谢你指出来,我已经纠正了这个例子。 - dkrider
1个回答

5
我不确定为什么您无法通过format()运行原子向量并获得期望的结果。这似乎与nsmall参数和小数点右侧的数字(可能未知)有关,我不太理解。
但看起来我们可以使用列表。从help(format)
如果x是一个列表,则结果是一个字符向量,它通过对列表每个元素(在将自身为列表的元素进行unlist后)应用format.default(x, ...)而获得,并且然后用paste(collapse = ", ")将每个元素的结果折叠起来。
因此,只需将原子向量强制转换为列表,然后它将按预期工作。
format(as.list(x), digits=3, scientific=FALSE)
# [1] "0.00000151" "0.0849"     "0.419"      "0.479"      "-0.833"   

数据:

x <- c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接