r - 在使用 lapply 到 select 按位置子列表元素时处理 NA

r - dealing with NAs when using lapply to select sublist elements by position

我有一个向量列表,其中一些是 NA。我需要使用 lapply 到 select 每个向量的倒数第二个元素。问题是 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"

在列表中使用 lapply 到 select 子元素时如何处理 NAs

始终至少寻找第一个...我们可以在此处使用 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))