考虑到这个帖子: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