क्या इस
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 हां, यही वह है जो मैं –