0

有谁知道在 R 中裁剪多级列表的方法?我的列表中的每个元素都有几个级别(例如属性“alive”、“age”、“color”)。我想裁剪列表以仅包含以下元素x$color=="blue"

例子

set.seed(1)
ind <- vector(mode="list", 20)
for(i in seq(ind)){
    ind[[i]]$alive <- 1
    ind[[i]]$age <- 0
    ind[[i]]$color <- c("blue", "red")[round(runif(1)+1)]
}

keep <- which(sapply(ind, function(x) x$color) == "blue")
keep
#[1]  1  2  5 10 11 12 14 16 19

ind[[keep]] # doesn't work
#Error in ind[[keep]] : recursive indexing failed at level 

NULL对于具有单个级别的列表,裁剪或设置为似乎是可能的,如以下答案所示,但不适用于我的多级列表。

4

2 回答 2

2

ind[keep]就是你要找的。

来自?'[['

The most important distinction between ‘[’, ‘[[’ and ‘$’ is that the ‘[’ can select more than one element whereas the other two select a single element.

于 2013-10-29T14:46:41.453 回答
2

或者,您可以使用Filter, 并删除该which步骤。

Filter(function(x) x$color == 'blue', ind)
于 2013-10-29T14:49:48.283 回答