R中按观测配对模拟变量相乘并求和生成数据框的方法
解决R语言中逐元素相乘模拟值并计算总和的问题
步骤1:生成逐元素相乘的模拟乘积列表
要让unit.cost和bldg.size中对应位置的向量逐元素相乘,用Map()函数最直接——它能同时遍历两个列表,把对应位置的元素配对处理:
# 生成每个观测的模拟乘积列表 bldg.cost <- Map(function(x, y) x * y, unit.cost, bldg.size)
Map()会自动把unit.cost的第1个向量和bldg.size的第1个向量逐元素相乘,第2个和第2个配对,以此类推,最终得到和原列表结构一致的bldg.cost列表。
步骤2:计算每个观测的乘积总和并生成数据框
接下来用sapply()遍历bldg.cost列表,对每个向量求和,再把结果转成数据框:
# 计算每个观测的bldg.cost总和 cost_totals <- sapply(bldg.cost, sum) # 转成数据框,添加观测编号列 result_df <- data.frame( 观测编号 = seq_along(cost_totals), 模拟总成本 = cost_totals )
这样得到的result_df就包含了每个观测对应的模拟总成本,结构清晰方便后续分析。
完整代码示例
把所有步骤整合起来:
# 代表每个观测的模拟次数的数值 simulations <- c(728, 680, 631, 583, 534, 486, 437, 388, 340, 291) # 使用lapply为每个观测生成模拟序列 unit.cost <- lapply(simulations, rnorm, mean = 8403.86, sd = 1000) bldg.size <- lapply(simulations, rnorm, mean = 35, sd = 5) # 生成逐元素相乘的模拟乘积列表 bldg.cost <- Map(function(x, y) x * y, unit.cost, bldg.size) # 计算总和并生成数据框 cost_totals <- sapply(bldg.cost, sum) result_df <- data.frame( 观测编号 = seq_along(cost_totals), 模拟总成本 = cost_totals ) # 查看结果 print(result_df)
内容的提问来源于stack exchange,提问作者hadi
相关产品推荐
相关产品推荐

