假设我有一个这样的函数:
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)
为了明确起见,您希望使用您的局部函数变量。