Я бы использовал lapply()
для построения списка индексов для каждой из (A*B*C)
частей. Затем передайте эти индексы в sapply
, извлекая каждый набор элементов из df1n
и умножая их на prod()
. Остальное говорит само за себя:
df1n <- 1:100
ll <- lapply(c(seq(25, 40, by=3), seq(61, 76, by=3)),
function(X) seq(X, by=1, length.out=3))
df1n[5] * sum(sapply(ll, function(i) prod(df1n[i])))
# [1] 11439180
EDIT : Теперь, когда я знаю, что каждый элемент df1n
представляет собой вектор длиной 215, вот код, который я бы предложил вместо:
# Example data (a list in which each element is a vector of length 215).
x <- replicate(100, 1:215, simplify=FALSE)
ll <- lapply(seq(25, 76, by=3), function(X) seq(X, by=1, length.out=3))
res <- x[[5]] * rowSums(sapply(ll, function(i) Reduce("*", x[i])))
str(res)
# num [1:215] 18 288 1458 4608 11250 ...