R语言如何批量将model开头的模型对象传入map(tidy)处理
批量提取全局环境模型构建列表的实现方案
不需要手动录入200个模型名,也不需要用复杂的元编程语法,用R自带的基础环境操作函数就能快速实现需求:
通用实现方法
通过正则匹配全局环境内符合命名规则的对象,再批量取值生成列表即可:
library(tidyverse) # 匹配全局环境中所有命名为「model+数字」格式的对象 model_names <- ls( pattern = "^model\\d+$", envir = .GlobalEnv ) # 批量提取对应对象,生成*带原对象名标识*的模型列表 model_list <- mget(model_names, envir = .GlobalEnv) # 直接传入map批量整理结果即可 model_list %>% map(tidy)
关键逻辑说明
ls()的pattern参数支持正则规则匹配:^model\\d+$代表匹配以model开头、后续全为数字的对象,刚好对应你model1到model200的命名规则,不会误捞其他名称带model的无关对象。mget()会根据传入的对象名字符向量,批量从指定环境中取出对应对象,返回的列表默认以原对象名作为列表元素名,后续整理结果时可以直接对应到具体模型,比手动构建的无名称列表实用性更强。
零误匹配备选方案
如果你确定模型编号是从1到200的连续序列,可以直接生成固定名称向量取对象,完全避免正则匹配的误判问题:
# 直接生成model1到model200的标准名称向量 model_names <- paste0("model", 1:200) model_list <- mget(model_names, envir = .GlobalEnv)
实操建议:后续做批量建模时,可以直接把模型输出存入列表,不需要把上百个模型散放在全局环境中,能省去后续重新聚合对象的步骤,代码管理也更清晰。
内容的提问来源于stack exchange,提问作者Vaibhav Singh
相关产品推荐
相关产品推荐

