我有一个向量列表,其中一些是NA
。我需要使用lapply
来选择每个向量的倒数第二个元素。问题是NAs
的长度为1,所以我无法访问它们的倒数第二个元素。
MyList <- list(a=c("a","b","c"),b=NA,c=c("d","e","f"))
VectorFromList <- unlist(lapply(MyList, function(x) return(x[length(x)-1])))
VectorFromList
a c
"b" "e"
如您所见,生成的向量比原始输入列表短,如果我想将其作为列添加到更长的数据帧中,这是一个问题。我的预期结果是一个与原始列表长度相同的向量:
[1] "a" NA "c"
使用NAs
在列表中选择子元素时如何处理lapply
?
答案 0 :(得分:2)
始终至少查找第一个……我们可以在此处使用max
unlist(lapply(MyList, function(x) return(x[max(1,length(x)-1)])))
# a b c
# "b" NA "e"
或者
sapply(MyList, function(x) return(x[max(1,length(x)-1)]))
mapply(`[[`, MyList, pmax(1, lengths(MyList)-1))