子集列表按索引变化

时间:2019-07-16 09:38:47

标签: r list lapply

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

我尝试了标准的子设置策略,例如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)

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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