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