Уменьшение значения без цикла for - PullRequest
0 голосов
/ 28 февраля 2019

Я хотел бы уменьшить (то есть умножить) значение (first.value) на вектор значений процентного снижения (fall.vector), где первое значение отклоняется относительно начального процентного значения снижения, затем это выходное значениеснизился против второго значения процентного снижения и так далее.Я предполагаю, что есть более элегантный способ сделать это в R, чем написание цикла for для переназначения нового значения и cbind для создания нового вектора, но я остаюсь новичком.

Векторы отклонения не являются последовательностями, подобныминиже, это всего лишь пример.Хотя можно ли упорядочить, где 'by =' - вектор?В? Seq я не нашел ничего, что подсказывало бы, что это возможно.

При этом:

first.value <- 100

decline.vector <- c(0.85, 0.9, 0.925, 0.95, 0.975)

Желаемый вывод:

[100] 85, 75.5, 70.763, 67.224, 65.544

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы также можете использовать cumprod

first.value * cumprod(c(1, decline.vector))
# [1] 100.00000  85.00000  76.50000  70.76250  67.22438  65.54377

Если вы не хотите, чтобы first.value был первым элементом вывода, тогда выполните

first.value * cumprod(decline.vector)
# [1] 85.00000 76.50000 70.76250 67.22438 65.54377
0 голосов
/ 28 февраля 2019

Вы можете сделать это с помощью функции Reduce в базе R

first.value <- 100    
decline.vector <- c(0.85, 0.9, 0.925, 0.95, 0.975)    
Reduce(`*`, decline.vector, first.value, accumulate = TRUE)
# [1] 100.00000  85.00000  76.50000  70.76250  67.22437  65.54377
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...