我想从一个深层嵌套的列表中提取特定单元格的值。某些子列表已经NA
处于较高级别,因此想要提取更深级别的值的循环将产生错误。
sapply(1:length(li),function(i) li[[i]][[1]]$b$l[2])
# Error: $ operator is invalid for atomic vectors
我不确定如何在这样的结构中省略NA
,例如失败并显示相同错误:
sapply(1:length(li),function(i) na.omit(li[[i]][[1]]$b$l[2]))
最后一次try()
尝试会给出所需的结果,但是结果中仍然有错误,我不得不烦恼地grep()
将其删除。
r <- sapply(1:length(li),function(i) try(li[[i]][[1]]$b$l[2],TRUE))
r[grep("Error",r)] <- NA
r
# [1] "2" "22" NA # <- desired result
能否在 base R 中更优雅地解决此问题?我也想避免扮成if
-else
s。
我喜欢以下内容,但我不知道如何使用它来省略NA
的{{1}}:
dat[!is.na(dat)]
数据
rapply(li,function(x) !is.na(x),h="l")