Я пытаюсь построить линейные графики образцов, взятых из лунок, специально для четырех «химикатов», а затем сложить эти 4 графика для каждой лунки и сохранить в PDF. Я немного не тренировался, и я уже заржавел. В настоящее время мой для l oop останавливается посередине и выдает вышеуказанную ошибку.
Ниже примерно то, как выглядят мои данные И пакеты, которые я вызываю:
ID date chemical result
<chr> <dttm> <chr> <num>
1 MW-01 2020-01-06 10:30:00 chemical 1~ 0.02
9 MW-02 2020-01-06 13:34:00 chemical 2~ 0.02
library(openxlsx)
library(tidyr)
library(ggplot2)
library(doBy)
library(lubridate)
library(officer)
library(readxl)
library(ggrepel)
library(ggridges)
library(cowplot)
library(data.table)
library(scales)
library("plyr")
library(dplyr)
Ниже мой для l oop без операторов if для графиков 3-4 (для краткость), которые дословно представляют собой первый / второй график с другими подключенными химическими веществами. Список лунок представляет собой фрейм данных с двумя столбцами: идентификатор лунки и номер сгенерированного рисунка. Я заметил, что мой сценарий работает примерно для 20% скважин, а затем дает ошибку.
for(l in 1:n_wells){
plot.dat<-data.frame(subset(tableH,(id %like% well_list[l,1])))
stacked.dat<-subset(plot.dat,(chemical %like% c("chemical 1","chemical 2",
"chemical 3","chemical 4")))
well<-well_list[l,1]
#min.date<-as.POSIXct("2020-01-01")
#max.date<-as.POSIXct("2020-07-01")
chm1table_lp <- subset(stacked.dat,(chemical %like% "chemical 1"))
chm2table_lp <- subset(stacked.dat,(chemical %like% "chemical 2"))
chm3table_lp <- subset(stacked.dat,(chemical %like% "chemical 3"))
chm4table_lp <- subset(stacked.dat,(chemical %like% "chemical 4"))
if(nrow(chm1table_lp)>0){
minc1 <- min(chm1table$result)
maxc1 <- max(chm1table$result)
chm1_plot <- ggplot(chm1table_lp, aes(x=sample_date,y=result))+
geom_line(data=chm1table_lp,aes(x=sample_date,y=result,group=1),color="orange",size=1)+
geom_point(data=chm1table_lp,shape=1,color="orange",size=2)+
labs(y="mg/L",x="Date")+
scale_color_discrete("Legend") +
scale_x_datetime(date_labels="%m/%Y",limits=c(min.date,max.date))+
scale_y_continuous(limits=c(minc1,maxc1),
breaks= breaks_extended(n=10))+
ggtitle(well)
plot_list[[k]] <- chm1_plot
k=k+1
}
if(nrow(chm2table_lp)>0){
minc2 <- min(chm2table$result)
maxc2 <- max(chm2table$result)
print("in chm2 if statement, min and max work")
chm2_plot <- ggplot(chm2table_lp, aes(x=sample_date,y=result,group=1))+
geom_line(data=tdstable_lp, aes(x=sample_date,y=result),color="blue",size=1)+
geom_point(data=chm2table_lp,shape=1,color="blue",size=2)+
labs(y="mg/L",x="Date")+
scale_color_discrete("Legend") +
scale_x_datetime(date_labels="%m/%Y",limits=c(min.date,max.date))+
scale_y_continuous(limits=c(minc2,maxc2),
breaks= breaks_extended(n=10))+
ggtitle(well)
print("chm2 plot works")
print(tds_plot)
#adding to plot list
plot_list[[k]] <- chm2_plot
print("chm2 plot added to list")
#increase index by 1
k=k+1
print("index increase after chm2")
}
multi_plot <- plot_grid(plotlist = plot_list,ncol=1,align = "v")
pdfname<-paste(well,".pdf",collapse=NULL,sep="")
ggsave(pdfname)
plot_list <- vector(mode="list")
k=1
}
Любая помощь приветствуется!