r - 使用存储的计算中的列表编写函数
问题描述
我正在尝试为 CLV 编写一个函数,它将每年的值(索引为 0 到 t)存储在一个列表中并对列表求和。是)我有的:
CLV_simple <- function (r, t, M, Alpha){
CLV = list()
for (i in 0:t){
CLV[i] <- M*(Alpha/(1+r))^i
return(sum(CLV))
}
}
CLV_simple(.10, 4, M, Alpha)
其中 CLV[0] = M*(Alpha/(1+r))^0,CLV[1] = M*(Alpha/(1+r))^1,以此类推 CLV[4]。
Alpha 和 M 之前被定义为变量。假设 Alpha 为 0.81,M 为 40.23
回报应该是每年的总和,或者:
(M*(Alpha/(1+.10))^0) + (M*(Alpha/(1+.10))^1) + (M*(Alpha/(1+.10))^2) + (M*(Alpha/(1+.10))^3) + (M*(Alpha/(1+.10))^4)
[1] 121.4646
当我运行我的函数时,我得到的是:
CLV_simple(.10, 4, M, Alpha)
list()
所以有些东西没有被保存到列表中,我不知道为什么。
解决方案
在您的代码中,
return
使您的代码在第一次迭代后跳出for
循环。您应该移动return
到for
完成循环的函数体的末尾。- 此外,
i
是访问的索引CLV
,它应该从而1
不是0
从开始0:t
。 - 还有一件事,
CLV
应该初始化为c()
,因为里面的元素list()
不能直接求和。
您可以尝试for
如下循环
CLV_simple <- function (r, t, M, Alpha){
CLV <- c()
for (i in 0:t){
CLV[i+1] <- M*(Alpha/(1+r))^i
}
return(sum(CLV))
}
或更简单的
CLV_simple2 <- function(r,t,M,Alpha) sum(M*(Alpha/(1+r))^(0:t))
推荐阅读
- java - 使用 ISO 4217 的 CurrencyCode 格式化 pl_PL 价格
- mysql - 将 mysql-db 挂载到 docker-container
- vb.net - 读取保存在文件中的连接字符串
- python - 在使用表中的 read_sql 时,有什么方法可以更改应该是 int 的列数据类型变成浮点数
- xml - 使用 Powershell 从 XML 元素中获取数据作为表格
- php - 如何在 symfony 中序列化嵌套对象的特定属性?
- c++ - 使用在 R 中训练的神经网络来预测 C++ 中的新数据
- r - 运行 rize - R 时包“rJava”的配置失败
- go - VS Code 中除 main.go 之外的调试文件
- java - 配置文件的Maven问题