如何基于其元素对列表进行子集化 - R.

时间:2015-09-16 19:34:52

标签: r

我想根据元素的值选择列表的子集。 我觉得这很简单,我觉得我很亲近。但我需要一些帮助。

我有一个'功能'列表ChemFeats.all:

> str(ChemFeats.all)
List of 20
 $ HPh_feats       : chr [1:4] "f_225" "f_3006" "f_2876" "f_2480"
 $ PhCN_feats      : chr "f_3285"
 $ PhCA_feats      : chr [1:2] "f_2477" "f_189"
 $ PYO_feats       : chr "f_3284"
 $ HHQ_feats       : chr [1:5] "f_3001" "f_750" "f_589" "f_186" ...
 $ PQS_feats       : chr [1:4] "f_2334" "f_2" "f_185" "f_408"

我有一个“好”的功能:

> str(gd_feats)
 chr [1:43] "f_649" "f_70" "f_711" "f_748" "f_3" "f_414" "f_2181" ...

现在我想要第一个列表的子集只包含好的功能。 这是我的一次尝试,我尝试了几个相似的版本,有些版本比其他版本更接近。

ChemFeats.all.GdFts<-lapply(ChemFeats.all, '[',function(x) match(x, gd_feats))

感谢您的帮助,

2 个答案:

答案 0 :(得分:2)

怎么样:

lapply(ChemFeats.all, function(y) gd_feats[gd_feats %in% y])

答案 1 :(得分:0)

所以,如果你想要做到这一点,lapply是正确的方法。问题是列表只是 - 列表。将它们视为其他类型对象的集合(您可以获取向量列表或data.frames列表或列表列表),这意味着找到单个值对于subset()这样的函数来说很难,因为它不明确至于你是否想要列表中具有$ VALUE&#34;的对象中的值?或&#34;值中的整个对象&#34;或......等等。

我这样做的方式如下:

good_chemfeats <- lapply(ChemFeats.all, function(features, good_features){
     return(features[features %in% good_features])
}, good_features = gd_feats)

这样做,对于列表中的每个向量,检查该向量是否包含任何好的特征。如果是,它将返回它们。据推测,您不仅要将其列入单独且以%为单位进行操作的原因是您希望保留列表名称,此方法应该