从函数特定对象提取值至数据框并绘制多运行结果图
嘿,我来帮你解决这个提取数据和绘图的问题!你用ldbounds包的bounds()函数得到的是一个列表对象,要把里面的关键值转成数据框,还要处理多次运行的结果来画图,下面是一步步的具体操作:
1. 把单次运行结果转成数据框
你的reas1.lin是个包含多个向量的列表,我们只需要把需要的字段(比如时间点、上下界)组合成数据框就行,这样后续处理和绘图都方便:
library(ldbounds) # 先运行函数得到结果 reas1.lin <- bounds(t = c(.5,.75,1), iuse = c(3,3), alpha = c(0.025,0.025)) # 提取核心字段构建数据框 result_df <- data.frame( time = reas1.lin$time, # 时间比例 lower_bound = reas1.lin$lower.bounds, # 下界值 upper_bound = reas1.lin$upper.bounds # 上界值 ) # 看看生成的数据框长啥样 print(result_df)
2. 处理多次运行的结果
如果要多次调整参数运行bounds(),我们可以把每次的结果都收集起来,合并成一个带标识的大数据框,这样绘图时能区分不同的运行组。举个例子,比如我们改变alpha参数跑3次:
# 先定义好几组不同的参数 param_list <- list( list(t = c(.5,.75,1), iuse = c(3,3), alpha = c(0.02, 0.03)), list(t = c(.5,.75,1), iuse = c(3,3), alpha = c(0.025, 0.025)), list(t = c(.5,.75,1), iuse = c(3,3), alpha = c(0.03, 0.02)) ) # 循环运行函数,把结果存成带运行标识的数据框 all_results <- lapply(seq_along(param_list), function(i) { current_params <- param_list[[i]] current_res <- bounds(t = current_params$t, iuse = current_params$iuse, alpha = current_params$alpha) # 给每组结果加个唯一标识,方便后续区分 data.frame( run_group = paste("Run", i), time = current_res$time, lower_bound = current_res$lower.bounds, upper_bound = current_res$upper.bounds ) }) # 把所有结果合并成一个数据框 combined_df <- do.call(rbind, all_results)
3. 绘制多次运行的对比图
用ggplot2来画这个图会很直观,能清晰对比不同运行组的上下界变化:
library(ggplot2) ggplot(combined_df, aes(x = time)) + # 绘制下界曲线 geom_line(aes(y = lower_bound, color = run_group)) + # 绘制上界曲线,用虚线区分 geom_line(aes(y = upper_bound, color = run_group, linetype = "Upper Bound")) + # 给每个时间点加个点标记 geom_point(aes(y = lower_bound, color = run_group)) + geom_point(aes(y = upper_bound, color = run_group)) + # 设置图表标签和样式 labs( x = "Time Proportion", y = "Critical Bounds", color = "Run Group", linetype = "" ) + theme_minimal()
小技巧补充
- 如果你还需要其他字段(比如
overall.alpha),直接在构建数据框的时候加进去就行,比如overall_alpha = res$overall.alpha。 - 如果运行次数很多,用
purrr包的map_dfr()可以更简洁地合并数据框,省去do.call(rbind, ...)的步骤,代码会更清爽。
内容的提问来源于stack exchange,提问作者Esther
相关产品推荐
相关产品推荐

