我有一个命名的矢量列表,y。列表的名称对应于变量x的值。我需要返回y中向量的值,该值与位置i处的x值相匹配。例如,如果索引为25的x ==“b”,我希望返回列表y中包含的“b”向量的第25个值。
这是我目前的解决方案:
x <- sample(letters[1:4], 100, replace = T)
y <- list("a"=rnorm(100), "b"=rnorm(100), "c"=rnorm(100))
i <- match(x, names(y))
m <- sapply(i, function(i) {out <- rep(0,3); out[i] <- 1; out})
final <- apply(t(m) * do.call(cbind, y), 1, sum)
我希望有一些更惯用的东西。作为解决方案的一部分,答案处理x中的值不出现在y的名称中的情况。
我试图解决的现实世界用例是我需要将几个分段模型预测应用于我需要分配给其相应段的整个群体的情况。
修改
此外,尽量避免ifelse
的笨拙使用。由于名称已知,我不必手动指定它们。
答案 0 :(得分:1)
使用具有二维索引的矩阵子集,您只需执行
do.call(cbind, y)[cbind(1:length(i), i)]