Одним из решений, которое еще не было найдено, является использование длины, которая успешно обрабатывает NULL.Насколько я могу судить, все значения, кроме NULL, имеют длину больше 0.
x <- list(4, -1, NULL, NA, Inf, -Inf, NaN, T, x = 0, y = "", z = c(1,2,3))
lapply(x, function(el) print(length(el)))
[1] 1
[1] 1
[1] 0
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 3
Таким образом, мы могли бы создать простую функцию, которая работает как с именованными, так и с пронумерованными индексами:
element.exists <- function(var, element)
{
tryCatch({
if(length(var[[element]]) > -1)
return(T)
}, error = function(e) {
return(F)
})
}
Если элемент не существует, он вызывает состояние «за пределами», перехваченное блоком tryCatch.