【发布时间】:2019-11-04 14:59:57
【问题描述】:
我有一个长度为n 的向量X,以及一个可变长度的索引列表L。让F 成为从 R^m 到 R 的函数。我想将函数 F 应用于每个子向量 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,但它似乎不适用于向量 + 索引列表 + 函数的组合。
【问题讨论】:
-
试试
lapply(L, function(i) mean(X[i])) -
@Sotos 这似乎可以解决问题。如果您发表评论作为答案,我会接受。
-
@SnoopDogg 请记住,直接方式可能不是最快的
-
@slava-kohut 有趣的评论。我会看看运行时间。
-
@SnoopDogg 使用
vector(n, mode = "list")创建要填充的向量。这样可以避免在内存中进行昂贵的复制。