Использование функции apply
для регрессии в этом случае в основном является вопросом предпочтения;он может обрабатывать некоторые бухгалтерии для вас (и, возможно, предотвращать ошибки), но не ускоряет код.
Я бы предложил использовать векторизованные функции для вычисления ваших first
и last
Однако, возможно, что-то вроде:
window <- 5
ng <- 15 #or ncol(g)
xy <- data.frame(first = pmax( (1:ng) - window, 1 ),
last = pmin( (1:ng) + window, ng) )
Или быть еще умнее с
xy <- data.frame(first= c(rep(1, window), 1:(ng-window) ),
last = c((window+1):ng, rep(ng, window)) )
Тогда вы можете использовать это в цикле for
, например:
results <- list()
for(i in 1:nrow(xy)) {
results[[i]] <- xy$first[i] : xy$last[i]
}
results
или с lapply
, например:
results <- lapply(1:nrow(xy), function(i) {
xy$first[i] : xy$last[i]
})
, где в обоих случаях я просто возвращаю последовательность между first и list;Вы должны заменить свой реальный код регрессии.