如何在R中保存列表列中存储的对象

如何在R中保存列表列中存储的对象,r,save,purrr,R,Save,Purrr,如果我生成一个模型列表列,并希望将所有模型保存为.rda文件,我会遇到一些麻烦 library(dplyr) library(tidyr) library(purrr) mt_models <- mtcars %>% group_by(cyl) %>% nest() %>% mutate( models = map(.x = data, .f = ~lm(mpg ~ wt, data = .x)),

如果我生成一个模型列表列,并希望将所有模型保存为.rda文件,我会遇到一些麻烦

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

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


# mt_models$models currently have no names
names(mt_models$models)

# so I've assigned names to the models so that save() will be handling named objects.
names(mt_models$models) <- paste("model", mt_models$cyl, "cyl", sep = "_")

walk2(
  .x = mt_models$models, 
  .y = mt_models$file_name,
  .f = ~save(.x, file = .y)
)
相反,如果我保存一个模型,它在我的环境中很容易查看,也很容易加载

mt_model <- lm(mpg ~ wt, data = mtcars)

save(mt_model, file = "temp.rda")

load("temp.rda")

mt\u model我们可以通过
ing分配给对象标识符,然后
保存

library(purrr)
library(dplyr)
library(stringr)
walk2(
  mt_models$models, 
  mt_models$file_name,

   ~   {nm1 <- str_remove(.y, "\\.rda")
       assign(nm1, .x)
       save(list = nm1, file = .y )
       }

)

saveRDS
可能会更好,不过模型将加载为
.x
,除非提供了
all.names=TRUE
,否则它不会显示在
ls()
中:

# In a fresh R session
load("model_6_cyl.rda")
ls( all.names=TRUE )
# [1] ".x"
通过将加载封装在新环境中(由
{}
定义),然后从该环境返回
.x
,可以在一次扫描中加载所有模型:

mdls <- purrr::map( list.files(pattern="rda"), ~{load(.); .x} )

mdls您可以指定
list=
我不清楚如何在
walk()
中应用
list=
。我试图将
list=
添加到
walk()
中的操作无效
walk2(.x=mt\u models$models,.y=mt\u models$file\u name,.f=~save(list=.x,file=.y))
@Joe我更新了帖子。对不起,早些时候我很忙
# In a fresh R session
load("model_6_cyl.rda")
ls( all.names=TRUE )
# [1] ".x"
mdls <- purrr::map( list.files(pattern="rda"), ~{load(.); .x} )