首页 > 解决方案 > 将函数应用于向量的索引列表?

问题描述

我有一个X长度向量和一个可变长度n索引列表。L让我们F成为从 R^m 到 R 的函数。我想将该函数F应用于每个 subvector X[L[[i]]。这是,我想计算F( X[ L[[i]] ] )

例如,假设这F是平均值

set.seed(123)
X <- rnorm(100)
L <- list()
for(i in 1:10) L[[i]] <- sample(1:100,30,replace = FALSE)

我可以通过蛮力计算

out <- vector()
for(i in 1:10) out[i] <- mean(X[ L[[i]] ])

但是,对于较大的尺寸,此 for 循环相当慢。我想知道是否有更直接的计算方法?我曾尝试使用lapply,但它似乎不适用于向量 + 索引列表 + 函数的组合。

标签: rlistfunctionfor-loop

解决方案


您可以简单地使用lapply循环您的列表并使用每个元素来子集您的 vector X。一旦你子集,计算平均值,即

lapply(L, function(i) mean(X[i]))

推荐阅读