Как изменить colsums и сумму в цикле в формуле?

#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 
  }
}