在一个因子上使用group_by()
时会出现错误,即使这个因素是后来的removed from the model using the minus operator (-
)。我的动机例子:
library(tidyverse)
df = mtcars %>% mutate(am = factor(am))
fits = df %>%
group_by(am) %>%
do(fit = lm(formula(mpg ~ . - am), .)) # Returns the error
这给出了以下错误消息:
`对比<-`(`tmp`,value = contr.funs [1 + isOF [nn]])出错:对比只能应用于2级或更高级别的因子
我得到同样的错误,如果我filter()
而不是组:
fit_am0 = df %>%
filter(am == 0) %>%
lm(formula(mpg ~ . - am), .) # Returns the error
当我试图去除的变量是一个因素,即两者的组合时,就好像formula()
函数没有正确地检测到减号运算符(- am
)。这是我的猜测,因为以下示例可以正常工作:
fits = mtcars %>% # `am` is numeric
group_by(am) %>%
do(fit = lm(formula(mpg ~ . - am), .)) # No error
fit_am0 = df %>%
filter(am == 0) %>%
select(-am) %>% # `am` removed prior to running model
lm(formula(mpg ~ .), .) # No error
fits2 = mtcars %>%
mutate(vs = factor(vs)) %>% # A non-grouped factor, later removed
group_by(am) %>%
do(fit = lm(formula(mpg ~ . - vs), .)) # No error
这是一个错误吗?或者我在激励的例子中犯了错误?
我找到了解决方案。删除数据选项中的因子而不是公式选项中的因子,即lm(formula = formula(mpg ~ .), data = select(., -am))
。
library(tidyverse)
df = mtcars %>% mutate(am = factor(am))
fits = df %>%
group_by(am) %>%
do(fit = lm(
formula(mpg ~ .),
select(., -am)
)) # No error