2014-07-21 28 views
0

我认为一旦将0替换为NA,以下代码将平稳运行。显示0,1,2,3的计数为table(x)。为什么我会收到以下错误(代码在没有拨打tryCatch的情况下运行时)?谢谢。指标变量:处理矢量中的替换NA

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') }) 
} 

回答

2

不能满足列表的第0个元素。因此X[[0]](第一个循环)不起作用。 没有tryCatch你的X名单只有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 
+0

非常有帮助,谢谢。我根本没有朝这个方向看:我认为0是一个有效的列表元素名称(强制为一个字符串或类似的东西)。 – user2105469