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

dkr*_*der 6 format formatting r

当我尝试使用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"
Run Code Online (Sandbox Code Playgroud)

但是,如果我依次对每个元素进行透析,我会得到预期的结果.

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"    
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

请注意,如果我设置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"
Run Code Online (Sandbox Code Playgroud)

Ric*_*ven 5

我不确定为什么你不能运行原子矢量format()并获得所需的结果.它与nsmall参数和小数点右边的位数(可能是未知的)有关,我不太明白.

但看起来我们可以使用列表.来自help(format):

如果x是列表,则结果是通过应用于format.default(x, ...)列表的每个元素(在unlist自身列表的元素之后)获得的字符向量,然后将每个元素的结果折叠paste(collapse = ", ").

因此,只需将原子矢量强制转换为列表,然后它就会按照需要运行.

format(as.list(x), digits=3, scientific=FALSE)
# [1] "0.00000151" "0.0849"     "0.419"      "0.479"      "-0.833"   
Run Code Online (Sandbox Code Playgroud)

数据:

x <- c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01) 
Run Code Online (Sandbox Code Playgroud)