如果某些元素在更高级别上已经不适用,如何提取深度嵌套列表的值? 数据

我想从一个深层嵌套的列表中提取特定单元格的值。某些子列表已经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")
wtuuser 回答:如果某些元素在更高级别上已经不适用,如何提取深度嵌套列表的值? 数据

您可以使用curl -i -H 'Authorization:Digest username="...",realm="...",nonce="...",uri="/plugin_install",qop=auth,nc=,cnonce="",response="..."' --form archive=@example.zip --form "mysubmit=Install" "http://IP/plugin_install"

purrr

即使路径不存在,map_dbl(li,~pluck(.,1,"b","l",2,.default=NA)) 函数也将始终返回一个值,我们可以为发生这种情况的时间设置默认值pluck()

您还可以在base R中编写自己的帮助程序。

NA
,

因此,避免出错的一种有效方法是使用tryCatch()

r <- sapply(1:length(li),function(i) tryCatch(li[[i]][[1]]$b$l[2],error = function(e) NA))

这将确保在出现任何类型的错误(非常有用的返回值)时,您总是得到NA

,

另一种无需进行tryCatch处理的简单解决方案:在进行unlist处理之后,将根据元素的名称和位置在b中要放置"l2的位置标记元素。

unname(sapply(sapply(1:length(li),function(i) unlist(li[[i]][[1]]$b)),`[`,"l2"))
# [1]  2 22 NA
本文链接:https://www.f2er.com/3142822.html

大家都在问