我想删除此列表中仅包含NA的所有元素:
List_data <- list("Green", "Yellow", c(NA,NA,NA), TRUE, 51.2)
Run Code Online (Sandbox Code Playgroud)
对于一种purrr方法:
library(purrr)
List_data %>%
map(discard, is.na) %>%
compact()
Run Code Online (Sandbox Code Playgroud)
请注意,您可以删除compact()并获得“任一”解决方案。
如果您的意思是删除整个元素(并且不留下空名称),请尝试:
Filter(function(a) any(!is.na(a)), List_data)
Run Code Online (Sandbox Code Playgroud)
编辑:使用Onyambu的建议(谢谢!)Negate(anyNA),这将是
Filter(Negate(anyNA), List_data)
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
List_data[!sapply(List_data, function(x) all(is.na(x)))]
Run Code Online (Sandbox Code Playgroud)
或者正如@snoram 指出的那样:
List_data[sapply(List_data, Negate(anyNA))]
Run Code Online (Sandbox Code Playgroud)
也可以表示为:
List_data[!sapply(List_data, anyNA)]
Run Code Online (Sandbox Code Playgroud)
EDIT2:根据akrun的评论,以下内容也可能有所帮助.
List_data[vapply(List_data, function(x) any(!is.na(x)), logical(1))]
Run Code Online (Sandbox Code Playgroud)
编辑:根据Onyambu的评论可能有助于删除其中包含NA的完整元素,感谢Onyambu在此指导.
List_data[!sapply(List_data, function(x) all(is.na(x)))]
Run Code Online (Sandbox Code Playgroud)
你可以试试以下:
lapply(List_data, function(x) x[!is.na(x)])
Run Code Online (Sandbox Code Playgroud)