Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 如何使混合类型和字符串的F向量精度达到n位数?_R_Printf - Fatal编程技术网

R 如何使混合类型和字符串的F向量精度达到n位数?

R 如何使混合类型和字符串的F向量精度达到n位数?,r,printf,R,Printf,我有一个向量,由混合的双精度值和非常短的字符串组成。我想sprintf它们,同时显示多达n位的结果。问题是,在使用例如sprintf(“%.8g”,x)时,我不能sprintf字符串,因此我使用“%.8s” 因此,如果R用科学记数法写下数字,我只打印数字的开头,结果毫无意义。这种行为的简单示例如下: koza <- c( pi, " > ", 2.01645169344289e-05) sprintf("%.8s", koza) 我希望收到的是以下内容: [1] "3.141592

我有一个向量,由混合的双精度值和非常短的字符串组成。我想
sprintf
它们,同时显示多达
n位的结果。问题是,在使用例如
sprintf(“%.8g”,x)
时,我不能
sprintf
字符串,因此我使用
“%.8s”

因此,如果R用科学记数法写下数字,我只打印数字的开头,结果毫无意义。这种行为的简单示例如下:

koza <- c( pi, " > ", 2.01645169344289e-05)
sprintf("%.8s", koza)
我希望收到的是以下内容:

[1] "3.1415927" " > "      "0.0000202"


我该怎么做呢?

因为这个向量中有混合的数字和字符串:

koza <- c( pi, " > ", 2.01645169344289e-05)
因此,使用
“%s”
格式化程序打印时,会将其格式化为字符串,因此您只会得到
“2.01645169344289e-05”
的前N个字符


您需要尽可能多地将它们保留为数字,将它们格式化为十进制数字,然后将它们粘贴到字符串中。

首先要尝试将它们转换为数字。如果不是na,则使用sprintf函数<代码>未列出(lappy(koza,函数(x){ifelse(!is.na(as.numeric(x)),sprintf(“%.8f”,as.numeric(x)),x)})
@DJJ谢谢!在我所做的工作中,对格式化非常有用。我将其定义为一个自定义函数,并使用它代替sprintf()。感谢您的回答!我知道为什么我会丢失数字,就像你说的,我可能需要以某种方式格式化它们,但我不知道怎么做。我并不知道unlist()、lappy()以及如何使用它们,但看起来@DJJ提供的解决方案非常适合我:-)我将其定义为一个自定义函数,并使用它代替sprintf()。
[1] "3.1415927" " > "      "2.0164517e-05"
koza <- c( pi, " > ", 2.01645169344289e-05)
> koza
[1] "3.14159265358979"     " > "                  "2.01645169344289e-05"
> sprintf("%.4s", "abcdefghij")
[1] "abcd"
> sprintf("%.4s", koza)
[1] "3.14" " > "  "2.01"