如何在R中实现随机数多次累加生成向量模拟财富累计
实现方案
结论
可以使用lapply实现你的需求,同时也有性能更优的向量化方案可供选择,两种方案都不会生成中间列,可自由调整累加次数,支持1000次甚至更高次数的计算:
方案1:向量化实现(推荐)
利用R的向量化运算特性,计算效率远高于循环类方案,代码最简洁:
library(dplyr) # 自定义累加次数,可随意修改为100、1000等数值 accumulate_times <- 100 df_final <- df %>% mutate( final_wealth = wealth + rowSums(replicate(accumulate_times, runif(nrow(.), -10, 10))) ) %>% select(households, final_wealth)
方案2:lapply实现
完全基于lapply实现的版本,符合你的要求:
library(dplyr) accumulate_times <- 100 df_final <- df %>% mutate( final_wealth = wealth + Reduce(`+`, lapply(1:accumulate_times, function(i) runif(nrow(.), -10, 10))) ) %>% select(households, final_wealth)
补充说明
如果后续你需要观察每一次累加后的财富变化过程,可以将上述代码中的Reduce替换为purrr::accumulate,即可保留所有中间节点的累计结果。
内容的提问来源于stack exchange,提问作者Namra
相关产品推荐
相关产品推荐

