我想在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
...
我想在每个步骤中获得一个向量,而不是#34;对于"。
由于
答案 0 :(得分:5)
尝试
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
答案 1 :(得分:1)
使用以下循环怎么样?
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
答案 2 :(得分:0)
如果您只想要最终产品,可以创建一个功能:
## 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