насчет функции, как этот
has_empty_list <- function(x) {
if(is.list(x)) {
if (length(x)==0) {
return(TRUE)
} else {
return(any(vapply(x, has_empty_list, logical(1))))
}
} else {
return(FALSE)
}
}
В основном мы создаем рекурсивную функцию для поиска списков длины 0.
has_empty_list(list(list("foo", "bar", "baz", list(list()))))
# TRUE
has_empty_list(list(list("foo", "bar", "baz", list(list(4)))))
# FALSE
А вот модификация найти индекс пустого списка
find_empty_list <- function(x, index=c()) {
if(is.list(x)) {
#list
if (length(x)==0) {
if (length(index)==0) {
return(0)
} else {
return(index)
}
} else {
m <- Map(find_empty_list, x, lapply(seq_along(x), function(i) append(index,i)))
# return the most deeply nested
return(m[[which.max(lengths(m))]])
}
} else {
return(numeric())
}
}
Это должно вернуть вектор индекса, который вы можете использовать для поиска пустого список. Например
(i <- find_empty_list(mylist))
# [1] 1 4 1
mylist[[i]]
# list()
Если сам первый параметр является пустым списком, он будет возвращать 0
find_empty_list(list())
# 0
и если нет пустого списка, он должен возвращать пустой вектор
find_empty_list(list(1:3, list("c", a~b)))
# numeric()
@MrFlick Да, это то, что я после –