在ggplot2中如何将生成的不同绘图分别存储到独立变量中
代码运行错误原因
你代码报错的核心原因是:R无法直接将paste0(i,'_plot')生成的字符串自动识别为变量名,放在<-左侧完成动态赋值。
可行解决方案
下面提供两种常用实现方式:
方法1:使用assign()函数完成动态变量创建
这是最贴合你原有写法的修改方案,assign()是R内置函数,专门支持将值赋值给指定名称的变量:
library(tidyverse) test_data <- data.frame( category=c('A','A','A','B','B','B'), price=c(1,1,2,3,2,2), amount=c(1:6) ) for (i in unique(test_data$category)){ # 第一个参数是要创建的变量名,第二个参数是要赋值的内容 assign(paste0(i,'_plot'), test_data %>% filter(category== i ) %>% ggplot(aes(x=price,y=amount)) + geom_point() + labs(title=paste0(i,'_plot'))) }
运行完成后就可以直接调用A_plot、B_plot查看生成的绘图。
方法2:将绘图存储在命名列表中(更推荐的规范写法)
批量生成的对象放在统一的列表里管理更合理,避免全局环境变量过多混乱,后续批量导出、遍历调用都更方便:
library(tidyverse) test_data <- data.frame( category=c('A','A','A','B','B','B'), price=c(1,1,2,3,2,2), amount=c(1:6) ) all_plots <- list() for (i in unique(test_data$category)){ all_plots[[paste0(i,'_plot')]] <- test_data %>% filter(category== i ) %>% ggplot(aes(x=price,y=amount)) + geom_point() + labs(title=paste0(i,'_plot')) }
调用时直接取列表元素即可,比如查看A类的图运行all_plots[["A_plot"]]即可。
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

