在R语言中,使用sapply函数提取列表中每个元素的第二个子元素,同时忽略NA值。

21

我试图在R中提取列表中每个元素的第二个子元素,同时忽略NA值。以下是一个小例子:

mylist <- list(a=c(6,7),b=NA,c=c(8,9))
sapply(mylist, "[[", 1)
sapply(mylist, "[[", 2) #receive error

由于元素 'b' 仅有一个子元素(NA),因此在尝试提取第二个子元素时,我收到以下错误:

Error in FUN(X[[2L]], ...) : subscript out of bounds

我的目标是使输出为:7、NA和9。换句话说,我想忽略和保留NA,以便输出的长度与列表中的元素数量相同。我希望解决方案足够通用,也能够应用于列表中每个子元素n。

2个回答

45

这应该能够满足您的要求:

sapply(mylist,function(x) x[2])

21
更简洁,但意思相同的翻译:sapply(mylist, function(x) x[2]) - nograpes

0
如果列表只包含双向量(如示例所示),我建议:
purrr::map_dbl(mylist, 2, .default=NA)

否则:
library(dplyr); purrr::map(mylist, 2, .default=NA) %>% unlist()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接