Для l oop при ошибке в середине l oop Ошибка в grobs [[i]]: нижний индекс вне допустимого диапазона - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь построить линейные графики образцов, взятых из лунок, специально для четырех «химикатов», а затем сложить эти 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
}

Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...