有没有办法从R中的对象列表中提取值列表?

时间:2017-03-16 22:56:12

标签: r list object

我正在尝试根据其中一个元素的值从对象列表中创建子列表。例如,我创建了一个对象类:

setClass("Foo",representation(Attrib = "vector"))

然后我创建了这个类的对象列表:

CreateData = function() { new("Foo",Attrib=sample(0:1,5,replace=TRUE)) }
FooSet = CreateData()
for(i in 1:20) { FooSet=c(FooSet,CreateData()) }

现在我想创建一个列表的子集,其中包含Attrib的第一个元素为1的集合。理想情况下,我会这样说:

FooSubset = FooSet[FooSet@Attrib[1] == 1]

但是,这会导致错误,因为FooSet [i]是一个对象的列表,而不是对象本身;要获取对象,我需要做FooSet [[i]]。是否有一种简单的方法可以使逻辑索引向量适当地检查对象元素,或者其他一些方法来做这个缺少for循环?

1 个答案:

答案 0 :(得分:1)

您可以在索引中使用sapply()。它仍然是一个循环,但你有一个列表,所以你将不得不有一个循环来抓取元素。

FooSet[sapply(FooSet, slot, "Attrib")[1, ] == 1]

FooSet[sapply(FooSet, function(x) x@Attrib[1]) == 1]