指标变量:处理向量中的替代NA

时间:2014-07-21 12:43:13

标签: r

我希望一旦将0替换为NA,以下代码将顺利运行。 table(x)显示0,1,2,3的计数。为什么我会收到以下错误(当代码在没有tryCatch调用的情况下运行时)?感谢。

 Error in X[[v]] <- ifelse(x == v, 1, 0) : 
   attempt to select less than one element

输入:

 x <- c(NA,NA,1,1,2,2,3,3)
 x[is.na(x)] <- 0
 uniqs <- sort(unique(x))
 X <- list()
 for ( v in uniqs ){
    tryCatch({
        X[[v]] <- ifelse( x == v , 1 , 0 )
    } , warning = function(w){print(w)}, error = function(e){ print(v);print(sum(x==v)) },
    finally = { print('done') } )
 }

1 个答案:

答案 0 :(得分:2)

您无法寻址列表的第0个元素。所以X[[0]](第一个循环)不起作用。 如果没有tryCatch,您的X-List只有3个元素

2解决方案:

类似于你的解决方案:

for ( v in (uniqs) ){
  X[[v+1]] <- ifelse( x == v , 1 , 0 ) #Invreasing v by 1
  print('done')
}

追加清单元素:

for ( v in uniqs ){
  X <- c(X, list(ifelse( x == v , 1 , 0 )))
  print('done')
}

结果(两种方式)

> X
[[1]]
[1] 1 1 0 0 0 0 0 0

[[2]]
[1] 0 0 1 1 0 0 0 0

[[3]]
[1] 0 0 0 0 1 1 0 0

[[4]]
[1] 0 0 0 0 0 0 1 1