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

如何在data.frame中按行用变量名筛选MuMIn的dredge对象?

解决dredge对象按行动态筛选的问题

问题重现

先模拟你的场景,生成测试数据、模型和目标数据框:

library(MuMIn)
library(dplyr)
library(purrr)
library(rlang)

# 模拟数据集
set.seed(123)
dat <- data.frame(
  y = rnorm(100),
  x1 = rnorm(100),
  x2 = rnorm(100),
  x3 = rnorm(100)
)

# 拟合全模型并运行dredge
full_mod <- lm(y ~ x1 + x2 + x3, data = dat, na.action = na.fail)
dredge_obj <- dredge(full_mod)

# 创建存储变量名和dredge对象的data.frame
df <- tibble(
  var_name = c("x1", "x2", "x3"),
  dredge_list = list(dredge_obj, dredge_obj, dredge_obj)
)

直接用固定列名筛选dredge对象正常:

# 固定列名筛选有效
filter(dredge_obj, x1 == TRUE)

但调用var_name列的字符串筛选时失败,这是因为dplyr的非标准求值不会自动将字符串转换为列名引用。

解决方案

推荐用purrr::map2结合rlang::sym实现动态列名筛选,比rowwise更稳定:

df <- df %>%
  mutate(selected = map2(dredge_list, var_name, ~ filter(.x, !!sym(.y) == TRUE)))

如果坚持用rowwise,可以用eval(parse())解析字符串为表达式:

df <- df %>%
  rowwise() %>%
  mutate(selected = filter(dredge_list, eval(parse(text = var_name)) == TRUE)) %>%
  ungroup()

原理说明

  • sym(.y)将字符串格式的列名转换为dplyr可识别的符号对象
  • !!强制求值该符号,让filter函数识别为dredge对象的列名
  • map2逐行匹配dredge_list和var_name,避免rowwise的非标准求值冲突

内容的提问来源于stack exchange,提问作者M. Riera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:07:15