You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言map函数中实现抽样、模型拟合并保存中间数据集

使用map函数同时保存抽样数据集并拟合模型

现有单次操作代码

你已经实现了单次抽样拟合的代码:

dat <- data.frame(
  x=rnorm(20, mean=5, sd=1),
  y=rnorm(20, mean=6, sd=1),
  weight = rnorm(20, mean=1, sd=0.2)
)

f <- function(data, var.x, var.y, n) {
  # 抽样
  data_subset <- data %>% sample_n(n, weight = weight, replace = T) %>% select(all_of(var.x), all_of(var.y)) %>% drop_na()
  # 拟合模型
  model <- lm(unlist(data_subset %>% select(y)) ~ unlist(data_subset %>% select(x))) 
  print(model)
}

f(data=dat, var.x="x", var.y="y", n=20)

你的尝试代码(存在语法问题)

你尝试用map实现批量操作,但写法有误:

f <- function(data, var.x, var.y, n) {
map(seq_len(20),
      # 抽样
      data_subset <- data %>% sample_n(n, weight = weight, replace = T) %>% select(all_of(var.x), all_of(var.y)) %>% drop_na()
      # 拟合模型
      model <- lm(unlist(data_subset %>% select(y)) ~ unlist(data_subset %>% select(x))) 
      print(model)
)
}

正确实现方法

当然可以同时保存抽样数据和模型,核心是让map的每个迭代返回一个包含抽样数据集和模型的列表,同时要注意map的第二个参数必须是一个函数。修正后的代码如下:

library(tidyverse)

dat <- data.frame(
  x=rnorm(20, mean=5, sd=1),
  y=rnorm(20, mean=6, sd=1),
  weight = rnorm(20, mean=1, sd=0.2)
)

batch_fit <- function(data, var.x, var.y, n, times) {
  map(seq_len(times), function(.x) {
    # 抽样步骤
    data_subset <- data %>% 
      sample_n(n, weight = weight, replace = TRUE) %>% 
      select(all_of(var.x), all_of(var.y)) %>% 
      drop_na()
    
    # 拟合模型,简化写法避免unlist
    model <- lm(formula(paste(var.y, "~", var.x)), data = data_subset)
    
    # 返回包含抽样数据和模型的列表
    list(sampled_data = data_subset, model = model)
  })
}

# 运行20次抽样拟合
results <- batch_fit(data=dat, var.x="x", var.y="y", n=20, times=20)

结果查看示例

  • 查看第3次抽样的数据集:results[[3]]$sampled_data
  • 查看第5次拟合的模型结果:summary(results[[5]]$model)
  • 打印所有模型结果:walk(results, ~print(summary(.x$model)))

关键说明

  1. map的第二个参数必须是匿名函数(或命名函数),每个迭代独立执行一次抽样和拟合
  2. 每次迭代返回一个列表,把需要保存的抽样数据、模型等对象都封装进去
  3. 用formula(paste(...))直接生成回归公式,替代繁琐的unlist写法
  4. 新增times参数控制抽样拟合的次数,让函数更灵活

内容的提问来源于stack exchange,提问作者EML

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:40:34