Применение функции к списку индексов вектора? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть вектор X длины n и список индексов 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]] ])

Тем не менее, это для цикла довольно медленно для больших размеров. Мне было интересно, есть ли более прямой способ для расчета? Я пытался использовать lapply, но, похоже, он не работает для комбинации вектора + списка индексов + функции.

1 Ответ

2 голосов
/ 04 ноября 2019

Вы можете просто использовать lapply, чтобы перебрать свой список и использовать каждый элемент для подмножества вашего вектора X. После поднабора вычислите среднее значение, т.е.

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