调用feols进行回归时如何处理变量名中的特殊字符?
报错原因
R的公式语法规定,包含特殊符号(短横线、&、空格等)、数字开头的非标准变量名,必须用反引号(`)包裹才能被正确识别,你此前的两种方案均未对变量名做特殊包裹处理,因此解析失败。
兼容特殊变量名的实现方案
方案1:修改字符串拼接逻辑(简单直观)
构造公式字符串时,主动给传入的变量名加上反引号包裹即可:
estimation_fun <- function(col1, col2, df) { # 变量名两侧加反引号适配非标准命名 fml <- as.formula(sprintf("`%s` ~ `%s` | Card + Date", col1, col2)) regression <- feols(fml, data = df) est <- tidy(regression)$estimate se <- tidy(regression)$std.error return(list(estimate = est, std.error = se)) }
测试运行estimation_fun("A-A","B B",data)即可正常返回结果。
方案2:使用fixest原生xpd函数构造公式(更推荐)
fixest自带的xpd()函数是专门用于动态构造回归公式的工具,会自动处理非标准变量名,无需手动处理转义,稳定性更高:
estimation_fun <- function(lhs, rhs, df) { # xpd自动映射传入的变量名,兼容特殊字符 fml <- xpd(lhs_col ~ rhs_col | Card + Date, lhs_col = lhs, rhs_col = rhs) regression <- feols(fml, data = df) est <- tidy(regression)$estimate se <- tidy(regression)$std.error return(list(estimate = est, std.error = se)) }
如果需要批量运行多组回归,直接将变量名组合放入循环或者lapply遍历调用该函数即可,完全不需要修改原始数据集的列名。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

