封装拟合函数后fixest包update()方法失效的原因与解决办法
解决fixest包中fepois封装自定义函数后update()无法获取数据集的问题
当用R的fixest包把fepois模型拟合逻辑封装到自定义函数里时,调用update()方法会出现无法识别拟合所用数据集的问题。执行update(mod2, . ~ . + log(Year))这类代码时,会触发报错:data参数非矩阵或数据框。
两种解决办法:
强制提前评估数据集表达式
在自定义函数内部,先把数据集的表达式评估为实际的数据对象,再传入fepois拟合。示例代码:fit_fepois <- function(data) { # 提前解析并评估数据集 data_eval <- eval(substitute(data), envir = parent.frame()) fepois(export ~ log(dist_km) | origin + dest, data = data_eval) } mod2 <- fit_fepois(trade) # 此时update可以正常执行 update(mod2, . ~ . + log(Year))在update()中重新指定data参数
直接在调用update()时显式传入原数据集,跳过自动识别的步骤。示例代码:# 常规封装的自定义函数 fit_fepois <- function(data) { fepois(export ~ log(dist_km) | origin + dest, data = data) } mod2 <- fit_fepois(trade) # 调用update时手动指定data参数 update(mod2, . ~ . + log(Year), data = trade)
内容的提问来源于stack exchange,提问作者dufei
相关产品推荐
相关产品推荐

