Использование для цикла для суммирования в R - PullRequest
1 голос
/ 01 апреля 2019

Это, вероятно, чрезвычайно очевидно, но я безуспешно пытался исправить это около часа (я вроде новичок):

Функция представляет собой сумму от 1: 8 выражения: xi * yi - 284400 (i) где xi и yi взяты из фрейма данных с двумя столбцами X и Y длиной 8. Оба я просто пытаюсь найти числовое значение, не вычисляя его самостоятельно.

Я попробовал следующий код, но при использовании цикла for кажется, что он продолжает присваивать мне целое значение 8. Неправильно ли я использую цикл for?

Примечание: я сделал вектор из столбца x под названием «xvalues», и аналогично столбец y был назван «yvalues»

for(i in 1:8){
    sum((xvalues[i]*yvalues[i])-284400*(i))
    }

После запуска я получаю нулевой вывод, и когда я вызываю i, он просто выдает:

[1] 8

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Просто используйте sum(df$X * df$Y - 284400*(1:nrow(df)))

Или вы можете использовать dplyr для этого:

library(dplyr)
df %>%
  mutate(value = X * Y - 284400 * row_number()) %>%
  summarise(sumvalue = sum(value))
1 голос
/ 01 апреля 2019

Вероятно, это связано с тем, что вы не сохраняете свой результат промежуточных шагов, поэтому вы получаете только результат окончательного расчета.

Вы можете получить общую сумму (используя цикл) с помощью:

# Initialize variable with the sum 
my.sum = 0
for(i in 1:8){
    current = (xvalues[i]*yvalues[i])-284400*(i)
    # Update variable storing sum
    my.sum = my.sum + current
}
> my.sum

Кроме того, вы можете векторизовать расчет, используя:

i = 1:8
sum((xvalues[i]*yvalues[i])-284400*(i))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...