r语言 - 使用dplyr逐行创建多个线性模型



考虑到这个帖子:https://www.tidyverse.org/blog/2020/06/dplyr-1-0-0/

我试图使用多个公式为数据集创建多个模型。这个例子说:

library(dplyr, warn.conflicts = FALSE)
models <- tibble::tribble(
~model_name,    ~ formula,
"length-width", Sepal.Length ~ Petal.Width + Petal.Length,
"interaction",  Sepal.Length ~ Petal.Width * Petal.Length
)
iris %>% 
nest_by(Species) %>% 
left_join(models, by = character()) %>% 
rowwise(Species, model_name) %>% 
mutate(model = list(lm(formula, data = data))) %>% 
summarise(broom::glance(model))

你可以看到rowwise函数是用来得到答案的,但是当我不使用这个函数时,我仍然得到正确的答案

iris %>%
nest_by(Species) %>% 
left_join(models, by = character()) %>% 
mutate(model = list(lm(formula, data = data))) %>% 
summarise(broom::tidy(model))

我只丢失了model_name"列,但是考虑到rowwise文档说,这个函数是计算,我不明白为什么仍然这样计算,为什么会发生这种情况?

thanks in advance.

考虑https://cran.r-project.org/web/packages/dplyr/vignettes/rowwise.html

您可以在调用rowwise()时选择提供"标识符"变量。调用summarise()时会保留这些变量,因此它们的行为与传递给group_by()的分组变量有些相似:

我不明白标识符是如何工作的,所以到目前为止我得到了这个"标识符";(Species,model_name)不会影响值的计算方式,只会影响代码的呈现方式。

因此,如果您有nest_by创建的逐行索引,则不需要rowwise()函数按行计算。所以在我的例子中,rowwise函数只给你额外的一列信息,但线性模型仍然是一样的。这只是为了一种"优雅的方式",它不会改变计算的方式。

感谢tmfmnk

最新更新