我有一个包含所有整数的嵌套列表(或列表列表)。一些嵌套列表具有NA从嵌套列表中的某个位置随机分配的值。我需要在第一个NA出现后删除嵌套列表中的所有位置。
例如,在我下面的 5 个嵌套列表的示例数据中L.miss,位置L.miss[[2]]是由 9 个不同长度的整数向量组成的列表。第一个NA出现在 positionL.miss[[2]][[4]][3]所以any(is.na(L.miss[[2]][[4]]))返回TRUE。在我想要的输出中,L.miss[[2]][4:9]需要删除职位。该列表L.want是期望的结果。
L.miss <- list(list(1,3,c(0,2,0),c(NA)),
list(1,6,c(0,3,2,0,1,0),c(0,0,NA,1,0,0),1,2,c(NA,1),2,c(0,0)),
list(1,0),
list(1,0),
list(1,4,c(2,0,0,0),c(4,1),c(1,NA,0,0,0),0),
list(1,0))
L.want <- list(list(1,3,c(0,2,0)),
list(1,6,c(0,3,2,0,1,0)),
list(1,0),
list(1,0),
list(1,4,c(2,0,0,0),c(4,1),
list(1,0))
我的尝试是遍历列表位置并分配一个NULL值:
try <- L.miss
for (i in 1:length(try)){
for (k in 1:length(try[[i]])){
if (any(is.na(try[[i]][[k]]))){
try[[i]][k:length(try[[i]])] <- NULL
}
}
}
但这会返回错误:Error in try1[[i]][[k]] : subscript out of bounds.
我假设这是因为它k在嵌套列表的全长处启动了 for 循环,然后删除了一个元素,所以现在超出了范围,但是尽管进行了详尽的搜索,但我不知道该解决方案的任何替代方案。
任何建议表示赞赏!