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

如何向feols的sw参数传入向量/字符串形式的右侧回归变量?

解决fixest::feols结合sw时字符串传入回归变量报错的问题

当使用fixest包的feols()函数结合sw()(逐步回归)执行多次估计时,若通过字符串向量传入右侧回归变量会报错,提示变量不在数据集中。以下是可行与不可行的代码示例:

可行代码

library(fixest)

set.seed(42)
data <- data.frame(
  y = runif(100, min = 1, max = 100),
  x1 = runif(100, min = 1, max = 100),
  x2 = runif(100, min = 1, max = 100)
)

rm <- feols(log(y) ~ sw(log(x1), log(x2)), data=data)
summary(rm)

不可行代码及错误信息

不可行代码

library(fixest)

set.seed(42)
data <- data.frame(
  y = runif(100, min = 1, max = 100),
  x1 = runif(100, min = 1, max = 100),
  x2 = runif(100, min = 1, max = 100)
)

regressors <- c("log(x1)", "log(x2)")
regressors <- paste(regressors, collapse = ", ")

rm <- feols(log(y) ~ sw(regressors), data=data)
summary(rm)

错误信息

Error in feols(log(y) ~ sw(regressors), data = data) : 
  The variable 'regressors' is in the RHS of the formula but not in the data set.

解决方法

方法1:解析字符串表达式并注入公式

使用rlang::parse_exprs()将字符串向量解析为表达式,再通过!!!(非标准求值)注入到sw()中,代码如下:

library(fixest)
library(rlang)

set.seed(42)
data <- data.frame(
  y = runif(100, min = 1, max = 100),
  x1 = runif(100, min = 1, max = 100),
  x2 = runif(100, min = 1, max = 100)
)

regressors <- c("log(x1)", "log(x2)")
# 把字符串转为可识别的表达式向量
reg_exprs <- parse_exprs(regressors)

rm <- feols(log(y) ~ sw(!!!reg_exprs), data=data)
summary(rm)

方法2:动态构建完整公式对象

直接拼接包含sw()逻辑的完整公式字符串,再转换为公式对象传入feols():

library(fixest)

set.seed(42)
data <- data.frame(
  y = runif(100, min = 1, max = 100),
  x1 = runif(100, min = 1, max = 100),
  x2 = runif(100, min = 1, max = 100)
)

regressors <- c("log(x1)", "log(x2)")
# 拼接完整公式字符串
formula_str <- paste0("log(y) ~ sw(", paste(regressors, collapse = ", "), ")")
# 转为公式对象
formula_obj <- as.formula(formula_str)

rm <- feols(formula_obj, data=data)
summary(rm)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:32