从函数 R 中的列表列表中删除 NA

标签 r

我有一个函数,它将整数的嵌套列表(或列表列表)作为输入,并根据某个概率 p1 随机分配 NA 的值。我想扩展此功能以从列表中删除 NA。

我知道删除 NA 是互联网上的一个常见问题,并且已经查看了 Stack Overflow 和其他地方的问题,但没有一个解决方案有效。一般来说,提出的问题并不涉及实际的列表。

我试过了:

#Example data
d<-list(1,3,c(0,NA,0),c(0,0))
e<-list(1,6,c(0,3,NA,0,NA,0),c(0,NA,0,1,0,0),1,NA,c(0,0))
f<-list(1,0)
L.miss<-list(d,e,f)

#Tests
test1<-lapply(L.miss,function(x) x[!is.na(x)]) #Doesnt work
test2<-lapply(L.miss,Filter,f=Negate(is.na)) #Doesnt work
test3<-lapply(L.miss,na.omit) #Doesnt work

下面是我用来分配 NA 值的函数(另外,如果它笨拙,请不要笑,我可能不像你那样有编码经验!)。我还添加了将生成长度为 3 的列表示例列表的代码,其中嵌套了各种长度的列表,类似于我的实际数据输入(尽管长度为 2000)。

imperfect.passive<-function(z,p1){
  z.imp<-z
  obs.surv<-integer()
  for (i in 1:length(z)){
    for (j in 1:length(z[[i]])){
      for (k in 1:length(z[[i]][[j]])){
        for (l in 1:length(z[[i]][[j]][[k]])){
        obs.surv[l]<-rbinom(1,1,p1)
        if (obs.surv[l]==0){
          z.imp[[i]][[j]][[k]]<-NA
          }
        }
          #######################################
          ##'@TODO -> Remove NA values from list
          #######################################
        }
        } 
  }
  return(z.imp)
}
#####for small example 
a<-list(1,3,c(0,2,0),c(0,0))
b<-list(1,6,c(0,3,2,0,1,0),c(0,0,0,1,0,0),1,2,c(0,0))
c<-list(1,0)
L.full<-list(a,b,c)

#assign NA with p=0.5
example<-imperfect.passive(L.full,0.5)

任何建议都将不胜感激,如果在其他地方得到回答,我深表歉意 - 我找不到它。

最佳答案

使用rapply:

rapply(L.miss, na.omit, how = "replace")

关于从函数 R 中的列表列表中删除 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58937886/

相关文章:

R:根据变量创建重复行(首选 dplyr)

r - 如何计算zip文件中csv文件的行数

r - 将插槽的缺失值设置为默认值

r - 有没有办法使用 spark_write_csv 在 sparklyr 中为 csv 文件设置名称?

regex - R 中的正则表达式,带有负向后视

html - 将本地 HTML 文件读入 R

r - 通过非 NA 值合并两个向量

r - 在 gganimate 中使用 transition_reveal 来累积绘制线条

r - 创建一个整数相似矩阵,使用 R

R Shiny 的自定义功能