我希望一旦将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') } )
}
答案 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