带r的累积积

带r的累积积,r,R,我想在excel中做一些常见的事情,但我不知道如何使用R: 10 * 1.01 = 10.1 (10+10.1) * 1.02 = 20.502 (10+20.5) * 1.03 = ... 它类似于cumprod,但*由外部向量生成 编辑: 我有两个向量,一个是c(50,52,54,55),另一个是c(1.01,1.02,1.03,1.04),我想做: 50 * 1.01 = 50.5 (50.5 + 52) * 1.02 = 104.55 ... 我想在每一步得到一个没有

我想在excel中做一些常见的事情,但我不知道如何使用R:

10        * 1.01 = 10.1 
(10+10.1) * 1.02 = 20.502
(10+20.5) * 1.03 = ...
它类似于cumprod,但*由外部向量生成

编辑:

我有两个向量,一个是c(50,52,54,55),另一个是c(1.01,1.02,1.03,1.04),我想做:

50 * 1.01 = 50.5
(50.5 + 52) * 1.02 = 104.55
...
我想在每一步得到一个没有“for”的向量


谢谢

使用下面的循环怎么样

v <- rep(NA, 3)
for(i in 1:length(v)){
    v[i] <- (max(v[i-1], 0) + 10)*(1 + i/100)
}
v
[1] 10.10000 20.50200 31.41706

v如果您只想要最终产品,您可以创建一个函数:

## Create equal length vectors
x <- rep(10, 10)
y <- seq(1.01, 1.1, .01)

## Create function
accumProd <- function(x, y){
  z = 0
  for (i in 1:length(x)){
    z <- (x[i]+z) * y[i]
  }
  z
}

accumProd(x,y)
[1] 146.3286
##创建等长向量
x试试看


x不太清楚你想做什么。你能提供一些向量的例子吗?另外,您在Excel中使用了什么函数?您希望您的输出是一个向量,显示每一步的结果还是最终的数字?这是无穷大吗?我添加了一个示例,谢谢!究竟是怎么回事呢
50*0.01=50.5
?这是一些新的数学吗?在这里,向量化是什么意思?我用向量化作为“不要使用循环”的委婉说法。它不是矢量化的吗?
sapply
是一个用R编写的循环,而不是用C/C++编写的矢量化循环(例如
rowSums
),所以不确定这是什么意思。虽然我不批评你的方法,但我只是想理解你的意思。R循环也很好,只是不属于矢量化范畴。我明白你的意思。R中的大多数向量化操作只是其他语言中的普通循环,因此从技术上讲,向量化的使用是错误的,充其量是不明确的。如果我错了,请纠正我。不。只有在运行以R编写的循环时(例如
for
while
sapply
以及
*apply
系列的所有其他部分等),才应避免使用矢量化术语。所有其余的循环(C/C++/Fortran)都称为矢量化。但是这个术语并不是那么重要,你可以说你基本上想要的:)谢谢,但我想在每一步都用它。
x <- 1 + 1:100/100 
f <- function(i) 10*sum(cumprod(x[i:1]))
# first 10 elements
sapply(1:10, f)
# [1]  10.10000  20.50200  31.41706  43.07374  55.72743  69.67108  85.24805
# [8] 102.86789 123.02601 146.32861
a <- c(50, 52, 54, 55)
b <- c(1.01, 1.02, 1.03, 1.04)
f1 <- function(i)sum((a[i:1])*cumprod(b[i:1]))
sapply(1:4, f1)
#[1]  50.5000 104.5500 163.3065 227.0388