y, c, and f only exist in the context of mac2 If you want to use them, you'll have to write mac2$y, mac2$c, or mac2$f (or the [[ versions mac2[["y"]], mac2[["c"]], or mac2[["f"]]) Combining that with index i would then look like mac2$y[[i]] or mac2[[i, "y"]]
Also, I think you want to use aes_string instead of aes (since you want those expressions within aes to be evaluated) Something like this seems to work for me: `%>%` <- magrittr::`%>%` writeLines(FILE <- tempfile(), text = r"{y,c,f hwy,cyl,hwy_cyl2 cty,class,cty_class2}") mac2 <- readr::read_csv(FILE) for (i in seq_len(nrow(mac2))) { ggplt <- ggplot2::mpg %>% dplyr::filter(hwy < 35) %>% ggplot2::ggplot( ggplot2::aes_string( x = "displ", y = mac2[[i, "y"]], color = mac2[[i, "c"]] ) ) + ggplot2::geom_point() + ggplot2::ylab(mac2[[i, "y"]]) + ggplot2::guides( color = ggplot2::guide_legend(title = mac2[[i, "c"]]) ) ggplot2::ggsave( filename = tempfile( mac2[[i, "f"]], fileext = ".jpg" ), plot = ggplt, width = 9, height = 6, dpi = 1200 ) } unlink(FILE) runs fine on my computer, but might look more like this for you: library(magrittr) library(ggplot2) library(dplyr) library(readr) mac2 <- read_csv("C:/temp/mac2.csv") for (i in seq_len(nrow(mac2))) { ggplt <- mpg %>% filter(hwy < 35) %>% ggplot( aes_string( x = "displ", y = mac2[[i, "y"]], color = mac2[[i, "c"]] ) ) + geom_point() + ylab(mac2[[i, "y"]]) + guides( color = guide_legend(title = mac2[[i, "c"]]) ) ggsave( filename = paste0("C:/temp/", mac2[[i, "f"]], ".jpg"), plot = ggplt, width = 9, height = 6, dpi = 1200 ) } try reading through aes and aes_string, and keep in mind that columns in data frames aren't R variables (where they are in Excel). If you want to use columns like they are variables, you can try using `with`. For example: library(magrittr) library(ggplot2) library(dplyr) library(readr) mac2 <- read_csv("C:/temp/mac2.csv") for (i in seq_len(nrow(mac2))) { with(mac2[i, ], { ggplt <- mpg %>% filter(hwy < 35) %>% ggplot( aes_string( x = "displ", y = y, color = c ) ) + geom_point() + ylab(y) + guides( color = guide_legend(title = c) ) ggsave( filename = paste0("C:/temp/", f, ".jpg"), plot = ggplt, width = 9, height = 6, dpi = 1200 ) }) } On Fri, Dec 24, 2021 at 4:48 PM Kai Yang via R-help <r-help@r-project.org> wrote: > Hello Team, > I create a csv file (mac2) to save parameter values. the file looks like: > > y,c,f > hwy,cyl,hwy_cyl2 > cty,class,cty_class2 > > Then I load the file into R and apply the parameters y, c, f in for loop, > see my code below: > library(ggplot2) > library(tidyverse) > library(readr) > mac2 <- read_csv("C:/temp/mac2.csv") > View(mac2) > for (i in seq(nrow(mac2))){ > mpg %>% > filter(hwy <35) %>% > ggplot(aes(x = displ, y = get(y[i]), color = get(c[i]) )) + > geom_point()+ > ylab(y[i]) + > guides(color = guide_legend(title = c[i])) > ggsave(paste0("c:/temp/",f[i],".jpg"),width = 9, height = 6, dpi = 1200, > units = "in") > } > > but I got an error message: "Error in dots_list(..., title = title, > subtitle = subtitle, caption = caption, : object 'y' not found" > Does anyone know how to fix the problem? > Thanks, > Kai > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.