2015-08-08 74 views
5

我有数字的向量在R:计算的位数的数值向量中的R

c(0.9, 0.81) 

,我想提取的位数对该矢量中的每个元件。由于数字为981,因此该命令将返回12。有没有一个方便的方法来做到这一点?另外,如果结果是1,我怎样才能扩展到两位数?例如,我想返回的矢量是

c(0.90, 0.81) 
+1

尝试'格式(V1,nsmall = 2)'用于打印或'的sprintf'待办事项你想把它作为'numeric'类返回吗?也许'round(v1,2)' – akrun

+0

在控制台输入'v',你会得到'0.90'和'0.81'。矢量自动打印矢量中任何一个数字的最高位数的所有元素。 –

回答

3
x <- c(0.9,0.81,32.52,0); 
nchar(sub('^0+','',sub('\\.','',x))); 
## [1] 1 2 4 0 

这条小数点,然后剥离所有引导零,最后使用字符串长度作为计算有效位数的间接方法。对于零输入它自然会返回零,但如果您愿意,您可以使用if表达式明确测试该情况并返回一个。

如akrun提到的,对于小数点后用两位数字打印时:( '%2F',V1)

sprintf('%.2f',x); 
## [1] "0.90" "0.81" "32.52" "0.00" 
6

要计算小数点后面的数字,你可以使用nchar

sapply(v, nchar) - 2 # -2 for "." and leading 0 
# 1 2 
+3

或'nchar(sub('。* \\。','',v1))'顺便说一句,'nchar(v1)-2'也应该起作用 – akrun

+3

您可能需要提一下,这不是一般性的。例如'32.52' – akrun

+0

@akrun是的,正如akrun所说的 – jenesaisquoi