提取列表中每个元素的第二个子元素,同时忽略R中的sapply中的NA

itp*_*sen 17 r list apply sapply na

我正在尝试提取列表中每个元素的第二个子元素,同时忽略R中的NA.这是一个小例子:

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

因为元素'b'只有一个子元素(NA),所以在尝试提取第二个子元素时收到以下错误:

Error in FUN(X[[2L]], ...) : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)

我的目标是输出为:7,NA,9.换句话说,我想忽略并保留NA,以便输出与列表中元素的数量相同.我希望解决方案足够通用,也可以将它应用于每个列表中的不同子元素n.

beg*_*neR 35

这应该做你想要的:

sapply(mylist,function(x) x[2])
Run Code Online (Sandbox Code Playgroud)

  • 或者更简洁,但相当于,`sapply(mylist,\`[\`,2)` (16认同)