R 如果嵌套列表中至少有一个值不是NA,则替换嵌套列表中的NA

R 如果嵌套列表中至少有一个值不是NA,则替换嵌套列表中的NA,r,R,我有两个相同嵌套列表(或列表列表)的版本。嵌套列表中的每个列表包含不同数量的向量(向量仅包含整数) 包含列表中所有数据的“完整”版本 “缺失”版本-与完整版本相同,但部分整数随机替换为NA 一些示例数据: #complete list L.full<-list(list(1,3,c(0,2,0),c(0,0)),list(1,6,c(0,3,2,0,1,0),c(0,0,0,1,0,0),1,2,c(0,1),2,c(0,0)), list(1,0),list(1,0),li

我有两个相同嵌套列表(或列表列表)的版本。嵌套列表中的每个列表包含不同数量的向量(向量仅包含整数)

  • 包含列表中所有数据的“完整”版本
  • “缺失”版本-与完整版本相同,但部分整数随机替换为NA
一些示例数据:

#complete list
L.full<-list(list(1,3,c(0,2,0),c(0,0)),list(1,6,c(0,3,2,0,1,0),c(0,0,0,1,0,0),1,2,c(0,1),2,c(0,0)),
     list(1,0),list(1,0),list(1,4,c(2,0,0,0),c(4,1),c(1,0,0,0,0),0))

#"randomly" allocated NAs
L.miss<-list(list(1,3,c(0,NA,0),c(0,0)),list(1,6,c(0,3,NA,0,NA,0),c(0,NA,0,1,0,0),1,NA,c(0,1),2,c(0,0)),
             list(NA,NA),list(1,0),list(1,NA,c(NA,0,0,0),c(NA,NA),c(1,0,0,NA,0),0))
这将重新指定原始值,但不加区分。我不确定如何(或在何处)添加这样的功能:首先评估所有
NA
值的嵌套列表,然后如果不是所有
NA
s,则运行“第二次机会”概率。非常感谢您的建议

过程:

x<-sapply(L.miss, function(x) all(is.na(unlist(x))))
x<-sapply(L.miss, function(x) all(is.na(unlist(x))))
temp<-rbind(L.miss,sapply(z.pass, function(x) all(is.na(unlist(x)))))
for (i in 1:length(L.miss)){
    if (temp[[i*2]]==TRUE){
        L.want[i]<-L.miss[i]
        } 
        else{ 
      for (j in 1:length(L.miss[[i]])){
        for (k in 1:length(L.miss[[i]][[j]])){
          for (l in 1:length(L.miss[[i]][[j]][[k]])){
            #See if the individual position in the nested list is an NA value
            if (is.na(L.miss[[i]][[j]][[k]])){
              if(runif(1)<p2){ #Stochastic process to determine if it should proceed
                L.want[[i]][[j]][[k]]<-L.full[[i]][[j]][[k]] #reassign original value
              }}}}}}}