#r #math #sum
#r #математика #сумма
Вопрос:
Я пытаюсь вычислить простое суммирование (чтобы узнать, как это работает на r, а затем использовать в более сложной задаче) в r.
Это суммирование, которое я пытаюсь вычислить
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