函数调用中的回归并没有返回与函数外的回归相同的输出



假设我有一个这样的函数:

get_contribution_table <- function(question_id){
fit <- lm(answer_correct ~ num_players,
data = filter(contribution_df, question_id == question_id))
print(summary(fit))
}

我运行get_contribution_table(27)

得到这个输出:

Coefficients:
Estimate Std. Error t value            Pr(>|t|)    
(Intercept)    0.70648    0.00514  137.49 <0.0000000000000002 ***
num_players   -0.00154    0.00436   -0.35                0.72    

然而,当我只是手动定义过滤器时,如下所示:

lm(answer_correct ~ num_players,data = filter(contribution_df, question_id == 27)

我得到了不同的估计:

Estimate Std. Error t value                                                 Pr(>|t|) CI Lower  CI Upper  DF
(Intercept)    0.73548   0.041228 17.8395 0.000000000000000000000000000000000000000000000000050041  0.65437  0.816587 323
num_players   -0.12723   0.035730 -3.5608 0.000425282833018741739366380683051716005138587206602097 -0.19752 -0.056934 323

我做错了什么?

当您卸载时

filter(contribution_df, question_id == question_id)

它只是检查question_id列是否等于它自己。dplyr不知道哪个值是列,哪个是局部变量名。为了解决这个问题,你可以明确地使用.env.data代词。你可以使用

filter(contribution_df, question_id == .env$question_id)

为了明确起见,您希望使用您的局部函数变量。

最新更新