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