r - 从函数 R 中的列表列表中删除 NA
问题描述
我有一个函数,它将整数的嵌套列表(或列表列表)作为输入,并根据某个概率 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")
推荐阅读
- java - 如何在 Scala/Java 中过滤中文标点符号?
- r - PCA Graph(和 ggcorrplot)中的字体样式
- laravel - Vagrant Homestead“存储”文件夹权限被拒绝
- reactjs - 使用 Enzyme 测试时如何键入组件实例?
- email - SSIS - 将电子邮件重定向到文件夹
- python-3.x - 请求授权未按预期工作
- .net - 无法生成预期的 jmeter(4.0) 报告
- scheduled-tasks - SQL*Plus 计划任务在连接超时后挂起
- node.js - 如何从 NodeJS/Express 发布表单
- html - 如何创建批量超链接(第 1 - 100 部分)