R语言函数迭代求助:新手需多次运行MC函数并计算标准差
解决R语言蒙特卡洛模拟的多次迭代问题
嘿,别担心,新手阶段遇到这类问题太正常了!你的基础函数已经搭得很好了,咱们来一步步实现多次迭代、计算标准差和绘制直方图的需求,这里有几种简单好用的方法:
方法1:用for循环实现迭代
如果你习惯用循环的思路,可以先创建一个空向量来存储每次迭代的结果,然后循环调用你的MC函数:
# 先设定你想要的迭代次数,比如1000次 n_times <- 1000 # 创建一个空向量,用来存放每次得到的r值 all_r <- numeric(n_times) # 循环执行函数,把结果存入向量 for (idx in 1:n_times) { all_r[idx] <- MC(1, 1) }
拿到结果向量后,计算标准差和绘制直方图就很简单了:
# 计算所有r值的标准差 sd(all_r) # 绘制直方图 hist(all_r, main = "直方图:模拟得到的r值分布", xlab = "r值", col = "lightgreen")
方法2:用replicate函数(更简洁的R风格写法)
R里有个专门用来重复执行函数的工具——replicate,它能帮你省去写循环的麻烦,代码更简洁:
# 直接生成1000次迭代的r值向量 all_r <- replicate(1000, MC(1, 1)) # 计算标准差 sd(all_r) # 绘制更美观的直方图 hist(all_r, main = "蒙特卡洛模拟r值的分布", xlab = "r", col = "lightblue", border = "white")
进阶:优化函数,一次生成多个结果
如果你的迭代次数非常多(比如上万次),可以优化原函数,让它直接生成多个样本,效率会更高:
# 优化后的向量版函数,支持指定生成n个r值 MC_vectorized <- function(PV, t, n) { # 一次生成n个正态分布的i值 i <- rnorm(n, .056, .01) FV <- PV * exp(i * t) r <- log(FV / PV) return(r) } # 直接生成1000个r值 all_r <- MC_vectorized(1, 1, 1000)
这样修改后,函数内部用向量化操作替代了循环,在大数据量下运行速度会快很多~
内容的提问来源于stack exchange,提问作者James Stirling
相关产品推荐
相关产品推荐

