从列表中选择多个元素
Posted
技术标签:
【中文标题】从列表中选择多个元素【英文标题】:Select multiple elements from a list 【发布时间】:2012-08-20 14:03:25 【问题描述】:我在 R 中有一个大约 10,000 个元素的列表。假设我只想选择元素 5、7 和 9。如果没有 for 循环,我不知道该怎么做。
我想做mylist[[c(5,7,9]]
之类的事情,但这不起作用。我也尝试过lapply
功能,但也无法正常工作。
【问题讨论】:
来自?"[["
的文档:[
、[[
和 $
之间最重要的区别是 [
可以选择多个元素,而其他两个选择一个元素。
对于@mrdwab 的评论,这是 R 的矢量化世界,“单个元素”可能是矢量!
【参考方案1】:
mylist[c(5,7,9)]
应该这样做。
您希望子列表作为结果列表的子列表返回;你不使用[[]]
(或者更确切地说,函数是[[
)——正如Dason在cmets中提到的那样,[[
抓住了元素。
【讨论】:
只是为了添加更多细节-“[”将返回一个子列表,因此您可以使用多个输入是有意义的。 "[[" 实际上会抓取元素本身,因此它只能接受单个输入,因为它不返回列表(除非元素本身是列表)。 这是矢量化的吗?我有两个列表:b
包含 1000 万个元素。 filter_bins
是一个列表,其中每个元素都是一个索引。所以只从b
获取具有相同索引的元素,我有lapply(filter_bins, function(x) b[x, ])
所以 b[x, ] 只返回行的子集(其中每个元素由 filter_bins 选择).. 我希望这是有道理的。我的问题是这很慢
@masfenix 你应该生成一个描述细节的新问题。
上述解决方案可以用 dplyr::select() 和 contains('some text") 之类的方法完成吗?
@HermanToothrot 你没有。至少不是直接的。您可以对要提取的索引进行 lapply 或 sapply 并使用[[
迭代地抓取相应的元素。但是如果你想提取多个元素,那么你实际上是在抓取一个子列表,你应该只使用[
以上是关于从列表中选择多个元素的主要内容,如果未能解决你的问题,请参考以下文章