我有一个由混合双精度值和非常短的字符串组成的向量。我想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"
我该怎么做?
答案 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"
您需要尽可能将它们保留为数字,将它们格式化为十进制数字,然后将它们粘贴到字符串中。