Умножать элементы вектора на один больше каждый раз

#r

#r

Вопрос:

Я пытаюсь создать вектор из другого вектора, где я каждый раз умножаю числа в векторе еще на одно.

Например, если бы у меня было (1,2,3), новый вектор был бы (1, 1 x 2, 1 x 2 x 3) = (1,2,6)

Я попытался создать цикл для этого, как показано ниже. Кажется, это работает для целых чисел, но не для десятичных дробей. Я не уверен, почему.

 x <- c(0.99,0.98,0.97,0.96,0.95)
for(i in 1:5){x[i]=prod(x[1:i])}
  

Полученный результат равен 0,9900000 0,9702000 0,9316831 0,8590845 0,7303385

что неверно, так как prod(x) = 0,8582777. Что не совпадает с последним элементом вектора.

Кто-нибудь знает, почему это так? Или есть предложение по улучшению моего кода, чтобы получить правильный ответ.

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

1. Для полноты, цикл for: out <- numeric(length(x)); for(i in seq_len(length(x))){ out[i] <- prod(x[1:i]) }; out Проблема с вашим решением заключается в том, что вы обновляете x , пока я создаю новый объект.

Ответ №1:

 test<-c(1,2,3)
cumprod(test)
[1] 1 2 6
  

Как предполагает @akrun, можно добиться того же с помощью:

 Reduce("*", test, accumulate = TRUE)