报错:无法将formula类转为数据框,求分析dplyr链式代码问题
解决
cannot coerce class ""formula"" to a data.frame错误 这个错误的根源很清晰——你在管道里调用lm()时参数传递顺序搞反了!
为什么会报错?
管道操作符%>%的默认行为是:把左边的输出作为第一个位置参数传给右边的函数。而lm()的标准语法是:
lm(formula, data, ...)
当你写data %>% filter(...) %>% lm(CFL_Purchased ~ Male)时,过滤后的数据集被传给了lm()的第一个参数(也就是formula的位置),而你写的公式CFL_Purchased ~ Male反而成了第二个参数(data的位置)。
这就导致lm()试图把你的公式当成数据框来处理,自然会抛出cannot coerce class ""formula"" to a data.frame的错误——它根本没法把公式转换成数据框啊!
修正方法
有两种简单的方式解决这个问题:
方法1:明确指定data参数
用.指代管道传来的数据集,把它传给lm()的data参数:
library(dplyr) data %>% filter(Info == 1, Male == 1) %>% lm(CFL_Purchased ~ Male, data = .) %>% summary()
方法2:指定formula参数名
当你明确给formula参数赋值后,管道的结果会自动匹配到data参数(因为它是lm()的第二个位置参数):
library(dplyr) data %>% filter(Info == 1, Male == 1) %>% lm(formula = CFL_Purchased ~ Male) %>% summary()
额外提醒
还有个逻辑小问题:你过滤条件里指定了Male == 1,这意味着过滤后的数据里Male列全是1,没有任何变异。用这样的变量作为自变量,lm()无法估计出有意义的系数,最终的summary结果里系数会显示为NA。如果这不是你想要的,可能需要调整过滤条件或者自变量选择哦。
内容的提问来源于stack exchange,提问作者user9631425
相关产品推荐
相关产品推荐

