Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何格式化具有指定精度级别的数字?_R_Format - Fatal编程技术网

R 如何格式化具有指定精度级别的数字?

R 如何格式化具有指定精度级别的数字?,r,format,R,Format,我想创建一个函数,该函数返回一个数字向量,其精度反映为只有n个有效数字,但没有尾随的零,而不是用科学记数法 e、 g,我想 somenumbers <- c(0.000001234567, 1234567.89) myformat(x = somenumbers, n = 3) 我一直在玩format、formatC和sprintf,但他们似乎不想独立处理每个数字,而是将数字作为字符串(引号)返回 这是我得到的最接近的例子: > format(signif(somenumbers,

我想创建一个函数,该函数返回一个数字向量,其精度反映为只有n个有效数字,但没有尾随的零,而不是用科学记数法

e、 g,我想

somenumbers <- c(0.000001234567, 1234567.89)
myformat(x = somenumbers, n = 3)
我一直在玩
format
formatC
sprintf
,但他们似乎不想独立处理每个数字,而是将数字作为字符串(引号)返回

这是我得到的最接近的例子:

> format(signif(somenumbers,4), scientific=FALSE)
[1] "      0.000001235" "1235000.000000000"
怎么样

myformat <- function(x, n) {
    noquote(sapply(a,function(x) format(signif(x,2), scientific=FALSE)))
}

myformat您可以使用signif函数四舍五入到给定数量的有效数字。如果不需要额外的尾随0,则不要“打印”结果,而是对其执行其他操作

> somenumbers <- c(0.000001234567, 1234567.89) 
> options(scipen=5)
> cat(signif(somenumbers,3),'\n')
0.00000123 1230000 
> 
>一些数字选项(scipen=5)
>cat(签名(某些数字,3),“\n”)
零点零零零零零一二三一二三零零零零
> 

sprintf
似乎做到了这一点:

sprintf(c("%1.8f", "%1.0f"), signif(somenumbers, 3))
[1] "0.00000123" "1230000"

这很好,但我希望它返回一个数字向量,因此,
options(digits=5)
在某些情况下可能很有用。
sprintf(c("%1.8f", "%1.0f"), signif(somenumbers, 3))
[1] "0.00000123" "1230000"