Следующее делает то, что вы хотите, используя mapply
и создает только один объект в .GlobalEnv
, который я назвал MFI
.
Я начинаю с создания вектора Base
, так как вы не опубликовали пример набора данных.
set.seed(2469) # Make the results reproducible
n <- 432
Base <- sample(100, n, TRUE)
step <- 12
b <- seq(1 + step, n, by = step)
a <- seq(1, n - step, by = step)
MFI <- mapply(function(i, j) sum(Base[i:j]^2)/sum(Base[i:j]), a, b)
head(MFI)
#[1] 63.66472 70.54014 67.60567 53.15550 58.71111 65.37008
Другой способ - использовать Map
, как предлагает @Parfait в своемкомментарий.
obj <- Map(function(i, j) sum(Base[i:j]^2)/sum(Base[i:j]), a, b)
names(obj) <- paste("MFI", 1980 + seq_along(obj), sep = "_")
obj$MFI_1981
#[1] 63.66472
Обратите внимание, что length(obj)
равно 35
, и поэтому последний obj
равен obj$MFI_2015
, а не MFI_2016
, как сказано в вопросе.Эту проблему легко решить, набрав n <- 444
в самом начале кода.