Как вычислить суммирование переменных в r

#r #math #sum

#r #математика #сумма

Вопрос:

Я пытаюсь вычислить простое суммирование (чтобы узнать, как это работает на r, а затем использовать в более сложной задаче) в r.

Это суммирование, которое я пытаюсь вычислить

!(https://imgur.com/1IHl3yj )

sum_{i=1}^5 (x^i) откуда x это 1:5 .

в основном результатом должен быть либо вектор, составленный таким образом (sum(1^i),sum(2^i),sum(3^i),sum(4^i),sum(5^i)) , чтобы позже я мог суммировать его, чтобы получить общую сумму, либо автоматически сумму. (равно 5699).

Код, который я пытался использовать, следующий:

 for(i in 1:5){
  for(x in 1:5){
  a[i] <- sum(x^(i))
  }
  }
a
  

однако результатом является этот вектор

 [1]    5   25  125  625 3125
  

это всего лишь выполнение 1^5 , 2^5 , 3^5 4^5 , 5^5

Есть какие-нибудь идеи о том, как это сделать?

Комментарии:

1. Выполняется ли это?! Инициализации a нет.

2. Да, извините, я забыл включить инициализацию a, но она была!

3. x <- 1:5; i <- 1:5; rowSums(outer(x, i, FUN='^'))

Ответ №1:

Это решает вашу проблему без for цикла, но более R-подобный sapply

 vec <- sapply(1:5,function(x) sum(x^(1:5)))

vec
[1]    5   62  363 1364 3905


Sum <- sum(vec)

Sum
[1] 5699
  

Комментарии:

1. Спасибо за ваш комментарий. Я отредактирую свой ответ. Я так привык к многострочным sapplys, что всегда забываю короткую однострочную строку.

2. Большое спасибо! Я представлял себе, что есть более простой и быстрый способ сделать это

Ответ №2:

Безусловно, лучше всего использовать встроенные функции (например, sapply, sum) в R, потому что они оптимизированы и иногда реализуются на более быстром языке программирования, таком как C. С другой стороны, циклы For выполняются внутри R и могут быть очень медленными.

Следующий код должен выполнять то, что вы просили, и может быть полезен для целей обучения:

 # initialize vector
a <- c()

for(x in 1:5) {
  # loop through all x

  # calculate sum for some x
  sum <- 0
  for(i in 1:5) {
    sum <- sum   x^i
  }
  # append result to vector a
  a <- c(a, sum)
}

print(a)
[1]    5   62  363 1364 3905
sum(a)
[1] 5699