1

purrr我正在尝试使用的函数保存一系列模型walk(),但出现以下错误:

“map2(.x, .y, .f, ...) 中的错误:找不到对象‘模型’”

library(dplyr)
library(tidyr)
library(purrr)

mt_models <- 
    mtcars %>% 
    group_by(cyl) %>% 
    nest() %>% 
    mutate(
        model = map(.x = data, .f = ~lm(mpg ~ wt, data = .x)),
        file_name = paste("model", cyl, "cyl.rda", sep = "_")
    ) 

mt_models %>% walk2(.x = model, .y = file_name, .f = ~save(.x, file = .y))

我可以使用以下代码成功保存模型:

walk2(.x = mt_models$model, .y = mt_models$file_name, .f = ~save(.x, file = .y))

但我试图理解为什么在第一个例子model中没有传入。walk2()

4

2 回答 2

1

mutate/summarise和其他tidyverse函数之外,我们需要做.$的就是提取列

library(dplyr)
library(purrr)
mt_models %>% {
    walk2(.x = .$model, .y = .$file_name, .f = ~save(.x, file = .y))
     }
于 2019-11-21T18:14:35.203 回答
1

您可以使用with它来提供搜索变量的环境

mt_models %>% 
  with(walk2(.x = model, .y = file_name, .f = ~save(.x, file = .y)))
于 2019-11-21T18:20:51.187 回答