如何用purrr为mtcars分组模型生成全数据集预测值?
解决purrr包中模型预测范围的问题
要得到包含3个元素、每个元素对应32个预测值的列表,核心是确保每个分组拟合的模型都对完整的mtcars数据集做预测,而不是仅对分组子集预测。以下是修正后的代码和说明:
完整代码示例
# 加载tidyverse(包含purrr) library(tidyverse) # 步骤1:按cyl拆分数据集 cyl_groups <- split(mtcars, mtcars$cyl) # 步骤2:为每个分组拟合线性模型 cyl_models <- map(cyl_groups, ~lm(qsec ~ hp, data = .x)) # 步骤3:用每个模型对整个mtcars数据集做预测 full_predictions <- map(cyl_models, ~predict(.x, newdata = mtcars))
也可以用管道简化为链式操作:
full_predictions <- mtcars %>% split(.$cyl) %>% map(~lm(qsec ~ hp, data = .x)) %>% map(~predict(.x, newdata = mtcars))
问题原因说明
你之前的代码应该是在predict时将newdata指定为了拆分后的分组子集(比如newdata = .x),导致每个模型仅预测自身分组的行,所以每个元素的长度小于32。修正后将newdata明确设为完整的mtcars,每个模型都会对全部32行数据生成预测值,最终得到的列表就会包含3个各含32个值的元素。
内容的提问来源于stack exchange,提问作者T. K.
相关产品推荐
相关产品推荐

