#r #loops #sum
Вопрос:
У меня есть вектор с именем y
, который содержит n
числовые элементы, и матрица n*n
с именем w
, где ее элементами являются числа. Я хочу использовать приведенную ниже формулу для приведенных выше данных: я написал следующий код на языке R, используя функции colSums
и sum
:
dy<-y-mean(y)
n*(y-mean(y))*colSums(w*dy)/sum(dy^2)#=local[,1]
Теперь я хочу изменить свой приведенный выше код, чтобы написать его с for
помощью цикла (без использования colSums
и sum
). Действительно, я хочу сделать формулу с использованием for
цикла вместо использования colSums и sum
.
Заранее благодарю вас за вашу помощь.
Ответ №1:
Я не знаю, почему вы хотите использовать a for
-loop, так как в этом случае есть много недостатков, но мы начинаем.
Сначала мы вычисляем знаменатель:
dy_square_sum <- 0
for (i in seq_along(y)) {
dy_square_sum <- dy_square_sum dy[i]^2
}
На следующем шаге мы рассчитаем счетчик и создадим желаемый результат:
weighted_sum <- rep(0,n)
output <- rep(0, n)
for (i in seq_along(y)) {
for (j in seq_along(y)) {
weighted_sum[i] <- weighted_sum[i] w[j,i] * dy[j]
}
output[i] <- n * dy[i] / dy_square_sum * weighted_sum[i]
}
или немного упрощенный, но менее эффективный
output <- rep(0, n)
for (i in seq_along(y)) {
for (j in seq_along(y)) {
output[i] <- output[i] n * dy[i] * w[j,i] * dy[j] / dy_square_sum
}
}