r-使用lapply按位置选择子列表元素时处理NA

时间:2018-10-25 23:28:07

标签: r lapply na

我有一个向量列表,其中一些是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

1 个答案:

答案 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))