我想根据元素的值选择列表的子集。 我觉得这很简单,我觉得我很亲近。但我需要一些帮助。
我有一个'功能'列表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))
感谢您的帮助,
答案 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)
这样做,对于列表中的每个向量,检查该向量是否包含任何好的特征。如果是,它将返回它们。据推测,您不仅要将其列入单独且以%为单位进行操作的原因是您希望保留列表名称,此方法应该。