本着 purr、broom、modelr 的精神,我正在尝试创建一个“元”data.frame,其中每一行表示数据集 (d) 和模型参数(yvar、xvars、FEvars)。例如:
iris2 <- iris %>% mutate(Sepal.Length=Sepal.Length^2)
meta <- data.frame(n=1:4,
yvar = c('Sepal.Length','Sepal.Length','Sepal.Length','Sepal.Length'),
xvars= I(list(c('Sepal.Width'),
c('Sepal.Width','Petal.Length'),
c('Sepal.Width'),
c('Sepal.Width','Petal.Length'))),
data= I(list(iris,iris,iris2,iris2)) )
现在,我想为“元”的每一列运行一个模型。然后使用模型输出对象添加列表列“模型”。为了运行模型,我使用了一个辅助函数,该函数使用数据集、y 变量和 x 变量的向量:
OLS_help <- function(d,y,xvars){
paste(y, paste(xvars, collapse=" + "), sep=" ~ ") %>% as.formula %>%
lm(d)
}
y <- 'Sepal.Length'
xvars <- c('Sepal.Width','Petal.Length')
OLS_help(iris,y,xvars)
如何OLS_help
对 meta 的所有行执行并将 OLS_help 的输出添加为列表列meta
?我尝试了以下代码,但它不起作用:
meta %>% mutate(model = map2(d,yvar,xvars,OLS_help) )
Error: Can't convert a `AsIs` object to function
Call `rlang::last_error()` to see a backtrace
OBS:当只有“数据”(嵌套)列表列(在哈德利的书中被篡改)时的解决方案是:
by_country <- gapminder %>% group_by(country, continent) %>% nest()
country_model <- function(df) { lm(lifeExp ~ year, data = df) }
by_country <- by_country %>% mutate(model = map(data, country_model))