2016-06-09 49 views
1

我有一个列表(例如A),其中包含元素的数量。每个元素具有相同的尺寸(例如100 x 200)。我有一个向量,idx,长度为100,与列表中的元素的行数相同。我想创建一个新列表,它是列表A的一个子集,例如通过idx == 1。我用过lapply,它似乎可行,但我失去了列表中的元素名称。你能否提出一个更好的方法来实现这一目标?非常感谢如何在不丢失元素名称的情况下获取列表中元素的子集?

# Generate a list A 
A = list() 
for (i in 1:26){ 
    A[[LETTERS[i]]] = matrix(runif(100*200,0,1),100,200) 
} 
# Generate a vector with 100 elements with integers between 1 and 5 
idx = sample(1:5, 100, replace=T) 
# Create subset list B from list A, where rows are idx==1 
B = lapply(1:26, function(x) A[[x]][idx==1,]) 
# However, in list B, I have lost all the element names 
+0

尝试'lapply(A,函数( x)x [idx == 1,])' – akrun

+0

@akrun - 谢谢 – Lafayette

回答

1

我们需要遍历list和子集它

B1 <- lapply(A, function(x) x[idx==1,]) 

检查是否从OP的结果是一样的

names(B) <- names(A) 
identical(B, B1) 
#[1] TRUE 
相关问题