根据模式

时间:2018-03-19 04:57:47

标签: r

我有一个包含600多个元素的列表。 summary(list)表示元素的模式为"list""character""logical"。如何删除没有模式为"list"的所有元素,而无需手动浏览并单独删除它们?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以is.listsapply一起使用,仅返回listlist元素:

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)