我一直在搞乱学习功能来计算作业答案(在这种情况下是货币的现值),而且我遇到了一些问题。
以下是代码:
pv <- function(x,y,z) {
list2 <- 0
ans <- 0
for(t in z){
fv <- x
d <- y
rate <- (1+d)^t
ans[t] <- fv/rate
}
return(ans)
}
要计算当前值,我想将函数应用于一个年份范围内的一个值(比如z = 1:10),并将每年的值存储在向量中。我的工作原理,但这种策略在其他应用程序中崩溃了。例如,当我想输入一个值向量(我有另一个函数,我通过函数运行ans
向量)一段时间后,我很难找到一个可用的向量。
答案 0 :(得分:0)
pv = function(fv, d, t)
fv/(1+d)^t
pv(1.05^2, 0.05, c(1, 2))
这是一个解释。基本上,在R中,代数函数自动应用于数字数据,因此通常不需要循环。
答案 1 :(得分:0)
我必须在for循环中进行更改,然后使用mapply
:
pv <- function(x,y,z) {
list2 <- 0
ans <- 0
for(t in 1:z){ # changed from t in z
fv <- x
d <- y
rate <- (1+d)^t
ans[t] <- fv/rate
}
return(ans)
}
mapply(pv, c(1000, 1200, 1500, 5600), c(.05, .02, .03, .09), 5)
输出:
[,1] [,2] [,3] [,4]
[1,] 952.3810 1176.471 1456.311 5137.615
[2,] 907.0295 1153.403 1413.894 4713.408
[3,] 863.8376 1130.787 1372.712 4324.227
[4,] 822.7025 1108.615 1332.731 3967.181
[5,] 783.5262 1086.877 1293.913 3639.616
每行包含一段时间内x
的每个值的当前值,即第1行是第1个时段的当前值。如果您只想要讨论所有值的第5个周期:
mapply(pv, c(1000, 1200, 1500, 5600), c(.05, .02, .03, .09), 5)[5,]