如何向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
相关产品推荐
相关产品推荐

