我正在尝试根据变化的索引对列表对象的值进行子集化。
我尝试了标准的子设置策略,例如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)
有什么想法吗?感谢您的帮助。
答案 0 :(得分:4)
您可以使用mapply
,通过它可以按其元素顺序遍历多个有序集。
mapply(function(x, y) x[y], mylist, var.index)
# [1] "0" "50" "3" "12"
答案 1 :(得分:2)
由于mylist
和var.index
具有相同的长度,因此您也可以使用sapply
/ lapply
sapply(seq_along(mylist), function(x) mylist[[x]][var.index[x]])
#[1] "0" "50" "3" "12"