我正在尝试编写一个函数,用于迭代(或使用
为了使用
即:
所需要的输出应该是:“
我已经开始编写这个函数,但是无法让它正常工作。
我认为一个函数应该:
如果函数运行良好,我最终可以在另一个因素上进行操作,例如:
purrr :: map()
)因子的每个级别,并为因子等于该级别的数据子集拟合lm()
模型。为了使用
mtcars
创建一个简单的可重现示例,只需说我想要针对mtcars $ gear
的每个值都有一个不同的lm
模型。 我将首先将其作为因子进行处理,因为我的实际问题涉及通过因子进行迭代:library(tidyverse)
mtcars <- mtcars %>%
mutate(factor_gear = factor(gear))
我希望该函数适用于每个 factor_gear
级别。这些级别由以下给出:
levels(mtcars$factor_gear)
即:
[1] "3" "4" "5"
所需要的输出应该是:“
所以我想要的输出是:
”。fit1 <- lm(mpg ~ cyl, data = mtcars %>% filter(factor_gear=="3"))
fit2 <- lm(mpg ~ cyl, data = mtcars %>% filter(factor_gear=="4"))
fit3 <- lm(mpg ~ cyl, data = mtcars %>% filter(factor_gear=="5"))
fits <- list(fit1, fit2, fit3)
我已经开始编写这个函数,但是无法让它正常工作。
我认为一个函数应该:
- 将因子的每个水平值转化为一个向量
- 对每个水平值运行一个lm模型。
fit_each_level <- function(factor_variable) {
# trying to: 1. get every level of of the factor into a vector
factor_levels <- levels(df_cars$factor_variable)
# trying to: 2. run an lm model for each level.
for i in factor_levels {
fit <- mtcars %>% filter(factor_variable==i [# every value of segment_levels]) %>%
lm(mpg ~ cyl, data = . )
}
}
fit_each_level(factor_gear)
如果函数运行良好,我最终可以在另一个因素上进行操作,例如:
mtcars <- mtcars %>%
mutate(factor_carb = factor(carb))
fit_each_level(factor_carb)
lm
。请注意,这可能会影响标准误差(使用mpg ~ cyl*factor_gear
在按组运行时可能与mpg ~ cyl
得到不同的标准误差)。 - MichaelChirico