r - работа с NA при использовании lapply для выбора элементов подсписка по позиции - PullRequest
0 голосов
/ 26 октября 2018

У меня есть список векторов, некоторые из которых 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 голосов
/ 26 октября 2018

Всегда ищите, по крайней мере, первый ... мы можем использовать 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))
...