我有一个包含600多个元素的列表。 summary(list)
表示元素的模式为"list"
,"character"
或"logical"
。如何删除没有模式为"list"
的所有元素,而无需手动浏览并单独删除它们?
谢谢。
答案 0 :(得分:2)
您可以is.list
与sapply
一起使用,仅返回list
个list
元素:
lst[sapply(lst, is.list)]
示例:
lst <- list(
list(a = 1:10, b = 1:10),
"abc",
TRUE);
lst;
#[[1]]
#[[1]]$a
# [1] 1 2 3 4 5 6 7 8 9 10
#
#[[1]]$b
# [1] 1 2 3 4 5 6 7 8 9 10
#
#
#[[2]]
#[1] "abc"
#
#[[3]]
#[1] TRUE
summary(lst);
# Length Class Mode
#[1,] 2 -none- list
#[2,] 1 -none- character
#[3,] 1 -none- logical
# Select list entries that are lists
lst[sapply(lst, is.list)];
#[[1]]
#[[1]]$a
# [1] 1 2 3 4 5 6 7 8 9 10
#
#[[1]]$b
# [1] 1 2 3 4 5 6 7 8 9 10
使用Filter
的其他选项(感谢@Frank):
Filter(is.list, lst);
答案 1 :(得分:0)
使用purr
,我们可以使用keep
library(purrr)
keep(lst, is.list)