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

R语言marginaleffects包:使用map函数调用predictions的正确语法

解决marginaleffects结合map批量计算预测值的问题

你的核心问题是错误地将字符串传给了datagrid,!!运算符只能解析符号/表达式,无法直接解析字符串,导致datagrid无法识别你指定的变量范围,同时也没正确触发默认的其他变量参考值逻辑。下面是两种可行的修正方案:

方案1:用命名列表传递参数

直接构造包含目标变量范围的命名列表,通过do.call调用datagrid,这种方式直观且不易出错:

library(marginaleffects)
library(purrr)

# 构造参数列表:每个元素对应一个要分析的变量及其范围
param_list <- list(
  list(var1 = 1:10),
  list(var2 = 21:30)
)

# 批量生成预测值,其他变量自动使用datagrid默认的参考值(数值取均值、分类取众数)
pred_list <- map(param_list, \(params) {
  predictions(my_model, newdata = do.call(datagrid, params))
})

方案2:用表达式传递参数

如果更习惯用表达式语法,可以用expr()构造变量范围的表达式,再通过!!解析:

library(marginaleffects)
library(purrr)

# 构造表达式列表
param_exprs <- list(
  expr(var1 = 1:10),
  expr(var2 = 21:30)
)

# 批量计算预测值
pred_list <- map(param_exprs, \(expr) {
  predictions(my_model, newdata = datagrid(!!expr))
})

示例验证(用mtcars数据)

为了让你更直观看到效果,这里用内置数据集演示完整流程:

# 构建示例模型
my_model <- lm(mpg ~ hp + wt, data = mtcars)

# 定义要分析的变量范围
param_list <- list(
  list(hp = seq(100, 200, by = 10)),  # hp从100到200,步长10
  list(wt = seq(2, 4, by = 0.2))      # wt从2到4,步长0.2
)

# 批量生成预测值
pred_list <- map(param_list, \(params) {
  predictions(my_model, newdata = do.call(datagrid, params))
})

# 查看结果
head(pred_list[[1]])  # hp对应的预测值
head(pred_list[[2]])  # wt对应的预测值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:53:17