我有一个R脚本,可以从表格数据创建多个趋势图。我需要将每个绘图导出为png文件。我使用png()搜索并尝试(无效)。看起来这应该是一个相对容易的解决方案。我的代码如下。有人可以就如何解决这个难题提出一些建议吗?
library(dplyr)
library(tidyr)
library(readr)
library(ggplot2)
library(magrittr)
library(stringi)
library(lubridate)
library(stats)
#load in datafiles
c_data <- read_csv ("C:/Projects/A_AX_tech_memo/data_analysis/AAX_data_2017_dtcts.csv")
C_data_out <-
c_data %>%
group_by(METHOD_NAME, STD_CON_LONG_NAME, SAMP_SITE_NAME, FILTERED_FLAG) %>%
ungroup() %>%
select(METHOD_NAME, STD_CON_LONG_NAME, SAMP_SITE_NAME, SAMP_DATE, STD_VALUE_RPTD, STD_ANAL_UNITS_RPTD, FILTERED_FLAG, STD_REPORTING_LIMIT, STD_REQUIRED_DETECTION_LIMIT, LAB_QUALIFIER) %>%
rename(Method = METHOD_NAME, Constit = STD_CON_LONG_NAME, Well = SAMP_SITE_NAME, Date = SAMP_DATE, Value = STD_VALUE_RPTD, Unit = STD_ANAL_UNITS_RPTD, Filtered = FILTERED_FLAG, MDL = STD_REPORTING_LIMIT, RDL = STD_REQUIRED_DETECTION_LIMIT, Flag =LAB_QUALIFIER) %>%
mutate(Date = mdy(Date))
dfs <- split(C_data_out, with(C_data_out, interaction(Well, Constit, Filtered)), drop = TRUE)
plotz <- lapply(dfs, function(x){
ggplot(data = x, aes(Date, Value)) +
geom_point(data = x, aes(color = Flag), size = 3) +
ggtitle(paste(x$Well, x$Constit, x$Filtered, sep =".")) +
ylab("ug/L or Pci/L") +
geom_smooth(method = "lm", se = FALSE, rm.na = TRUE) +
geom_hline(aes(yintercept=x$MDL, linetype="MDL"), color ="dark green", lwd=1, lty=2) +
geom_hline(aes(yintercept=x$RDL, linetype="RDL"), color ="purple", lwd=1, lty=2)
})
以下是我尝试使用png的示例:
names <- lapply(dfs, function(x){
ggtitle(paste(x$Well, x$Constit, x$Filtered, sep ="."))
})
plotz <- lapply(dfs, function(x){
mypath <- file.path("C:","plots", paste(names[i], ".png", sep = ""))
png(file=mypath)
ggplot(data = x, aes(Date, Value)) +
geom_point(data = x, aes(color = Flag), size = 3) +
ggtitle(paste(x$Well, x$Constit, x$Filtered, sep =".")) +
ylab("ug/L or Pci/L") +
geom_smooth(method = "lm", se = FALSE, rm.na = TRUE) +
geom_hline(aes(yintercept=x$MDL, linetype="MDL"), color ="dark green", lwd=1, lty=2) +
geom_hline(aes(yintercept=x$RDL, linetype="RDL"), color ="purple", lwd=1, lty=2)
dev.off()
})
这给了我这个错误:
Error in paste(names[i], ".png", sep = "") : object 'i' not found
非常感谢任何和所有帮助。
答案 0 :(得分:1)
此代码段使用purrr中的map和walk函数。
mtcars_split <-
mtcars %>%
split(.$cyl)
paths <-
paste0(names(mtcars_split),".png")
plots <-
mtcars_split %>%
map(~ ggplot(data=.,mapping = aes(y=mpg,x=wt)) + geom_point())
pwalk(list(filename=paths,plot=plots),ggsave)