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

时间:2017-01-21 14:05:07

标签: r printf

我有一个由混合双精度值和非常短的字符串组成的向量。我想sprintf他们,同时显示最多n位的结果。问题是,我在使用时无法sprintf字符串,例如sprintf("%.8g", x),所以我使用的是"%.8s"

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

koza <- c( pi, " > ", 2.01645169344289e-05)
sprintf("%.8s", koza)

我收到的是:

[1] "3.141592" " > "      "2.016451"

我想要收到的是:

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

[1] "3.1415927" " > "      "2.0164517e-05"

我该怎么做?

1 个答案:

答案 0 :(得分:1)

因为此向量中包含混合数字和字符串:

koza <- c( pi, " > ", 2.01645169344289e-05)

R已将它们全部转换为字符串:

> koza
[1] "3.14159265358979"     " > "                  "2.01645169344289e-05"

因此,使用"%s"格式化程序进行打印会将其格式化为字符串,因此您只能获得"2.01645169344289e-05"的前N个字符。

> sprintf("%.4s", "abcdefghij")
[1] "abcd"
> sprintf("%.4s", koza)
[1] "3.14" " > "  "2.01"

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