【发布时间】:2016-08-10 17:23:39
【问题描述】:
在阅读了 tidyverse 的更多内容后,我开始一次拟合多个线性模型,如 this 中所述。也就是说,我会按照以下方式做一些事情:
library(dplyr)
library(tidyr)
library(purrr)
df <- data.frame(y = rnorm(10),
x1 = runif(10),
x2 = runif(10))
df %>%
gather(covariate, value, x1:x2) %>%
group_by(covariate) %>%
nest() %>%
mutate(model = map(.x = data , .f = ~lm(y ~ value, data = .))) %>%
mutate(rsquared = map_dbl(.x = model, .f = ~summary(.)$r.squared))
问题在于,当变量不是同一类型时,这种方法会失败,例如当一个是数字而一个是因子时,因为gather() 函数会将整个value 向量强制转换为一个因子。例如,
df <- data.frame(y = rnorm(10),
x1 = runif(10),
x3 = sample(c("a", "b", "c"), 10, replace = TRUE))
df %>%
gather(covariate, value, x1:x3) %>%
sapply(class)
后面是警告
Warning message:
attributes are not identical across measure variables; they will be dropped
y covariate value
"numeric" "character" "character"
而value 列是一个字符,因此nest() 的技巧将不再起作用,因为所有协变量都将作为因子放入。
我想知道是否有一种 整洁 的方式来做到这一点。
【问题讨论】: