【问题标题】:Subset list by varying index不同索引的子集列表
【发布时间】:2019-07-16 09:38:47
【问题描述】:

我正在尝试根据不同的索引对列表对象中的值进行子集化。

我已经尝试过标准的子设置策略,例如 lapply。但是,它们仅适用于固定索引。例如,子设置每个列表元素的第一个值。然而,我想在每个列表元素中选择不同的索引位置。

考虑以下列表:

mylist<-list(c("25","0","33"),c("50","1"),c("100","2","3", "45"),c("12", "54"))

我可以使用 lapply 轻松地为每个列表元素中的第一个值设置子集:

lapply(mylist,"[", 1)

这给了我每个列表元素中的第一个值。但是,考虑这样一种情况,我希望第一个元素的第二个值、第二个元素的第一个值、第三个元素的第三个值等等。 换句话说,我想通过不同的索引进行子集化,例如:

var.index <- c(2,1,3,1)

所以我收到了最终值

c(0,50,3,12)

有什么想法吗?感谢您的帮助。

【问题讨论】:

  • 你可以使用mapply

标签: r list lapply


【解决方案1】:

您可以使用mapply,您可以使用它按元素的顺序遍历多个有序集合。

mapply(function(x, y) x[y], mylist, var.index)
# [1] "0"  "50" "3"  "12"

【讨论】:

  • 黄金!正是我想要的。谢谢!
【解决方案2】:

由于mylistvar.index 的长度相同,您也可以使用sapply/lapply

sapply(seq_along(mylist), function(x) mylist[[x]][var.index[x]])
#[1] "0"  "50" "3"  "12"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2012-08-26
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多