从R中的数值获取数字的n尺寸向量

时间:2014-11-05 15:27:08

标签: r

我正在尝试编写一个函数,它返回一个数字向量,表示所提供的x数字的n个十进制数字。这是我到目前为止编写的代码:

decdig <- function(x, n){
   stopifnot(is.numeric(x))
   stopifnot(is.integer(n))
   head ( lapply(strsplit( as.character(x) , ""), as.numeric) , n)
}

所以说明:

  

decdig(pi,10L)

返回:

[[1]]
 [1]  3 NA  1  4  1  5  9  2  6  5  3  5  8  9  7  9

但应该是:

3 1 4 1 5 9 2 6 5 3

这意味着它应该生成数字向量而不进行舍入。

由于逗号,我有一个问题就是摆脱那里的NA值。我试图让它尽可能优雅,而不使用控制流机制。

任何想法都赞赏。

1 个答案:

答案 0 :(得分:1)

这是一种方法:

decdig <- function(x, n) {
  stopifnot(is.numeric(x))
  stopifnot(is.integer(n))
  z <- sub('\\D', '', 
           sprintf(paste0('%.', n - nchar(abs(floor(x))) + 2, 'f'), x))
  head((strsplit(z, '')[[1]]), n)
}

decdig(pi, 10L)
# [1] 3 1 4 1 5 9 2 6 5 3

我们通过从n中减去前导位数来计算所需的小数位数(如果有的话),然后将其传递给sprtinf以强制x为具有该数字的字符小数位数。然后我们分出非数字字符(应该只包括,.,具体取决于区域设置)。然后我们将每个角色分开并强制转换为numeric