From a680da8d872fdd5c703962a6e1803c22ef7b76aa Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Thu, 18 Apr 2024 17:30:55 -0500 Subject: [PATCH 01/11] Reduce direct imports --- .gitignore | 1 - DESCRIPTION | 2 +- NAMESPACE | 23 ----------------------- R/EGRET.R | 27 ++------------------------- R/boxConcMonth.R | 2 +- R/boxConcThree.R | 4 ++-- R/boxQTwice.R | 2 +- R/boxResidMonth.R | 4 ++-- R/calculateMonthlyResults.R | 20 ++++++++++---------- R/cumQdate.R | 4 ++-- R/estSurfaces.R | 2 +- R/genericEGRETplot.R | 6 +++--- R/kalman_functions.R | 4 ++-- R/makeAnnualSeries.R | 8 ++++---- R/plot1of15.R | 2 +- R/plotConcQSmooth.R | 6 +++--- R/plotConcTimeSmooth.R | 6 +++--- R/plotContours.R | 24 ++++++++++++------------ R/plotDiffContours.R | 22 +++++++++++----------- R/plotMonthTrend.R | 4 ++-- R/plotSDLogQ.R | 2 +- R/populateDaily.r | 2 +- R/printSeries.R | 2 +- R/readDataFromFile.r | 2 +- R/readMetaData.r | 4 ++-- R/runGroups.R | 2 ++ R/runPairs.R | 4 ++-- R/runSurvReg.R | 8 ++++---- R/stitch.R | 4 ++-- R/tableResults.R | 2 +- man/EGRET-package.Rd | 14 ++++++++++---- man/cumQdate.Rd | 2 +- man/plotContours.Rd | 7 ++++--- man/plotDiffContours.Rd | 6 +++--- tests/testthat/Rplots.pdf | Bin 4367 -> 4367 bytes 35 files changed, 98 insertions(+), 136 deletions(-) diff --git a/.gitignore b/.gitignore index 4e166fa0..17d60f26 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ Meta/ Newstuff/ *.docx vignettes/*.html -vignettes/*.R vignettes/EGRET.R vignettes/Enhancements.R vignettes/TrendsByMonth.R diff --git a/DESCRIPTION b/DESCRIPTION index 2d67f187..50f8ff77 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -58,6 +58,6 @@ Copyright: This software is in the public domain because it contains materials the United States Department of Interior. For more information, see the official USGS copyright policy at https://www.usgs.gov/information-policies-and-instructions/copyrights-and-credits -RoxygenNote: 7.2.3 +RoxygenNote: 7.3.1 Roxygen: list(old_usage = TRUE) Encoding: UTF-8 diff --git a/NAMESPACE b/NAMESPACE index 357c1799..ade8afc5 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -140,16 +140,7 @@ exportClasses(fluxUnit) exportClasses(monthLabel) exportClasses(qUnit) import(methods) -importFrom(grDevices,colorRampPalette) -importFrom(graphics,abline) importFrom(graphics,axis) -importFrom(graphics,box) -importFrom(graphics,boxplot) -importFrom(graphics,contour) -importFrom(graphics,filled.contour) -importFrom(graphics,grconvertX) -importFrom(graphics,grconvertY) -importFrom(graphics,legend) importFrom(graphics,lines) importFrom(graphics,mtext) importFrom(graphics,par) @@ -157,18 +148,4 @@ importFrom(graphics,plot) importFrom(graphics,points) importFrom(graphics,segments) importFrom(graphics,title) -importFrom(stats,aggregate) -importFrom(stats,filter) -importFrom(stats,lm) -importFrom(stats,median) -importFrom(stats,na.omit) -importFrom(stats,predict) -importFrom(stats,quantile) -importFrom(stats,reshape) -importFrom(stats,rnorm) -importFrom(stats,sd) importFrom(stats,var) -importFrom(utils,URLencode) -importFrom(utils,read.delim) -importFrom(utils,tail) -importFrom(utils,write.table) diff --git a/R/EGRET.R b/R/EGRET.R index 038e9db6..53b53e29 100644 --- a/R/EGRET.R +++ b/R/EGRET.R @@ -26,43 +26,20 @@ Extended Documentation: https://rconnect.usgs.gov/EGRET") #' #' @name EGRET-package #' @docType package -#' @importFrom utils write.table -#' @importFrom utils read.delim -#' @importFrom utils URLencode -#' @importFrom utils tail -#' @importFrom stats aggregate -#' @importFrom stats lm -#' @importFrom stats median -#' @importFrom stats sd -#' @importFrom stats reshape -#' @importFrom stats filter -#' @importFrom stats rnorm -#' @importFrom stats na.omit #' -#' @importFrom graphics abline #' @importFrom graphics axis -#' @importFrom graphics box -#' @importFrom graphics boxplot -#' @importFrom graphics contour -#' @importFrom graphics filled.contour -#' @importFrom graphics grconvertX -#' @importFrom graphics grconvertY -#' @importFrom graphics legend #' @importFrom graphics lines #' @importFrom graphics mtext #' @importFrom graphics par #' @importFrom graphics points #' @importFrom graphics segments #' @importFrom graphics title -#' @importFrom stats predict -#' @importFrom stats quantile -#' @importFrom grDevices colorRampPalette #' @author Robert M. Hirsch \email{rhirsch@@usgs.gov}, Laura De Cicco \email{ldecicco@@usgs.gov} #' @references Hirsch, R.M., and De Cicco, L.A., 2014, User guide to Exploration and Graphics for RivEr Trends #' (EGRET) and dataRetrieval: R packages for hydrologic data: U.S. Geological Survey Techniques and Methods book 4, #' chap. A10, 94 p., \doi{10.3133/tm4A10} -#' @keywords water-quality graphics streamflow statistics -NULL +#' @keywords internal +"_PACKAGE" #' Example eList #' diff --git a/R/boxConcMonth.R b/R/boxConcMonth.R index 586e564c..448962cf 100644 --- a/R/boxConcMonth.R +++ b/R/boxConcMonth.R @@ -124,7 +124,7 @@ boxConcMonth <- function(eList, printTitle = TRUE, units = localINFO$param.units) yTicksLab <- prettyNum(yInfo$ticks) - boxplot(tempDF$conc ~ tempDF$month, + graphics::boxplot(tempDF$conc ~ tempDF$month, ylim = c(yInfo$bottom,yInfo$top), yaxs = "i", yTicks = yInfo$ticks, diff --git a/R/boxConcThree.R b/R/boxConcThree.R index ae6104a2..ba8dc37d 100644 --- a/R/boxConcThree.R +++ b/R/boxConcThree.R @@ -107,7 +107,7 @@ boxConcThree<-function (eList, tinyPlot=FALSE, yTicks <- yPretty(yMax) yTop <- yTicks[length(yTicks)] - boxplot(concV ~ index,varwidth=TRUE, + graphics::boxplot(concV ~ index,varwidth=TRUE, names = groupNames,xlab = "", ylab = yLab, ylim = c(0,yTop), axes = FALSE, main = plotTitle, font.main = font.main, cex = cex, @@ -119,7 +119,7 @@ boxConcThree<-function (eList, tinyPlot=FALSE, axis(2,tcl=0.5,las=1,at=yTicks,cex.axis=cex.axis) axis(3,tcl=0.5,at=c(1,2,3),labels=FALSE) axis(4,tcl=0.5,at=yTicks,labels=FALSE) - box() + graphics::box() if (!tinyPlot) mtext(title2,side=3,line=-1.5) invisible(eList) } \ No newline at end of file diff --git a/R/boxQTwice.R b/R/boxQTwice.R index f61304a5..01d57b23 100644 --- a/R/boxQTwice.R +++ b/R/boxQTwice.R @@ -111,7 +111,7 @@ boxQTwice<-function(eList, logScaleText <- "" } - boxplot(bigQ~index,varwidth=TRUE, + graphics::boxplot(bigQ~index,varwidth=TRUE, names=groupNames,xlab="", ylim=c(yInfo$bottom,yInfo$top), main=plotTitle,cex=cex,ylab=yLabel, diff --git a/R/boxResidMonth.R b/R/boxResidMonth.R index 8df64c30..be458018 100644 --- a/R/boxResidMonth.R +++ b/R/boxResidMonth.R @@ -104,7 +104,7 @@ boxResidMonth <- function(eList, monthList <- singleMonthList[localSample$Month] monthList <- factor(monthList, namesListFactor) - boxplot(resid ~ monthList, + graphics::boxplot(resid ~ monthList, varwidth = TRUE, xlab = "Month", ylab = yLab, main = plotTitle, @@ -114,7 +114,7 @@ boxResidMonth <- function(eList, cex.axis = cex.axis, las = las, ...) - abline(h = 0) + graphics::abline(h = 0) if (!tinyPlot) mtext(title2, side = 3, line = -1.5) invisible(eList) } \ No newline at end of file diff --git a/R/calculateMonthlyResults.R b/R/calculateMonthlyResults.R index d99d37a7..0a60c71c 100644 --- a/R/calculateMonthlyResults.R +++ b/R/calculateMonthlyResults.R @@ -16,22 +16,22 @@ calculateMonthlyResults <- function(eList){ localDaily <- getDaily(eList) - nDays <- aggregate(localDaily$ConcDay, by=list(localDaily$MonthSeq), function(x) sum(!is.na(x)))$x + nDays <- stats::aggregate(localDaily$ConcDay, by=list(localDaily$MonthSeq), function(x) sum(!is.na(x)))$x - Q <- aggregate(localDaily$Q, by=list(localDaily$MonthSeq), mean)$x - DecYear <- aggregate(localDaily$DecYear, by=list(localDaily$MonthSeq), mean)$x + Q <- stats::aggregate(localDaily$Q, by=list(localDaily$MonthSeq), mean)$x + DecYear <- stats::aggregate(localDaily$DecYear, by=list(localDaily$MonthSeq), mean)$x Year <- trunc(DecYear) - Month <- aggregate(localDaily$Month, by=list(localDaily$MonthSeq), mean)$x - Conc <- aggregate(localDaily$ConcDay, by=list(localDaily$MonthSeq), mean)$x - Flux <- aggregate(localDaily$FluxDay, by=list(localDaily$MonthSeq), mean)$x - FNConc <- aggregate(localDaily$FNConc, by=list(localDaily$MonthSeq), mean)$x - FNFlux <- aggregate(localDaily$FNFlux, by=list(localDaily$MonthSeq), mean)$x + Month <- stats::aggregate(localDaily$Month, by=list(localDaily$MonthSeq), mean)$x + Conc <- stats::aggregate(localDaily$ConcDay, by=list(localDaily$MonthSeq), mean)$x + Flux <- stats::aggregate(localDaily$FluxDay, by=list(localDaily$MonthSeq), mean)$x + FNConc <- stats::aggregate(localDaily$FNConc, by=list(localDaily$MonthSeq), mean)$x + FNFlux <- stats::aggregate(localDaily$FNFlux, by=list(localDaily$MonthSeq), mean)$x kalman <- all(c("GenConc","GenFlux") %in% names(localDaily)) if(kalman){ - GenConc <- aggregate(localDaily$GenConc, by=list(localDaily$MonthSeq), mean)$x - GenFlux <- aggregate(localDaily$GenFlux, by=list(localDaily$MonthSeq), mean)$x + GenConc <- stats::aggregate(localDaily$GenConc, by=list(localDaily$MonthSeq), mean)$x + GenFlux <- stats::aggregate(localDaily$GenFlux, by=list(localDaily$MonthSeq), mean)$x MonthlyResults <- data.frame(Month, Year, nDays, DecYear, Q, diff --git a/R/cumQdate.R b/R/cumQdate.R index 68dc555c..f7cd0b9e 100644 --- a/R/cumQdate.R +++ b/R/cumQdate.R @@ -27,7 +27,7 @@ #' annualFlow <- cumQdate(eList) #' head(annualFlow) #' plot(annualFlow) -#' mod1 <- lm(annualFlow[,2] ~ annualFlow[,1]) +#' mod1 <- stats::lm(annualFlow[,2] ~ annualFlow[,1]) #' summary(mod1) cumQdate <- function(eList, paStart = 10, paLong = 12, @@ -65,6 +65,6 @@ cumQdate <- function(eList, } } - annualSeries <- na.omit(annualSeries) + annualSeries <- stats::na.omit(annualSeries) return(annualSeries) } \ No newline at end of file diff --git a/R/estSurfaces.R b/R/estSurfaces.R index 21b376c3..0dc8f760 100644 --- a/R/estSurfaces.R +++ b/R/estSurfaces.R @@ -92,7 +92,7 @@ estSurfaces<-function(eList, surfaceStart=NA, surfaceEnd=NA, localSample=NA, sliceIndex <- which(vectorYear >= decimalDate(as.Date(surfaceStart)) & vectorYear <= decimalDate(as.Date(surfaceEnd))) - Year <- vectorYear[c(sliceIndex[1]-1, sliceIndex, tail(sliceIndex, n = 1)+1)] + Year <- vectorYear[c(sliceIndex[1]-1, sliceIndex, utils::tail(sliceIndex, n = 1)+1)] nVectorYear <- length(Year) estPtYear <- rep(Year,each=14) diff --git a/R/genericEGRETplot.R b/R/genericEGRETplot.R index 80617714..43dc6b26 100644 --- a/R/genericEGRETplot.R +++ b/R/genericEGRETplot.R @@ -84,9 +84,9 @@ genericEGRETDotPlot <- function(x,y, xlim, ylim, ylim=ylim,yaxs=yaxs,ylab=if(showYLabels) ylab else "", main=plotTitle,col=col,lwd=lwd, pch=pch,cex=cex,cex.main=cex.main,font.main=font.main,cex.lab=cex.lab,...) - box() - if (hLine) abline(h = 0) - if (oneToOneLine) abline(a=0,b=1) + graphics::box() + if (hLine) graphics::abline(h = 0) + if (oneToOneLine) graphics::abline(a=0,b=1) if(rmSciX){ xTicksLab <- prettyNum(xTicks) diff --git a/R/kalman_functions.R b/R/kalman_functions.R index 7a493c14..63523c24 100644 --- a/R/kalman_functions.R +++ b/R/kalman_functions.R @@ -106,7 +106,7 @@ WRTDSKalman <- function(eList, rho = 0.90, niter = 200, endFill <- zends[iGap]+1 nFill <- zz$length[iGap]+2 if(i == 1 | i == numGap) { - z <- rnorm(nFill - 2) + z <- stats::rnorm(nFill - 2) xfill <- c(xxP[startFill], z, xxP[endFill]) } else { xfill <- genmissing(xxP[startFill], xxP[endFill], rho, nFill) @@ -385,7 +385,7 @@ plotWRTDSKalman <- function(eList, sideBySide = FALSE, ylab = ylab, cex.main = 0.9, plotTitle = title2) - abline(a = 0, b = 1) + graphics::abline(a = 0, b = 1) if(sideBySide){ mtext(mainTitle, line = -1, side = 3, outer = TRUE, cex= 1) diff --git a/R/makeAnnualSeries.R b/R/makeAnnualSeries.R index 140431de..da4e99d5 100644 --- a/R/makeAnnualSeries.R +++ b/R/makeAnnualSeries.R @@ -97,7 +97,7 @@ makeAnnualSeries<-function(eList, edgeAdjust = TRUE) { if (goodDay > 26 * paLong) { annualSeries[1, 4:8, i] <- mean(yearDaily$DecYear, na.rm = TRUE) - annualSeries[2, 4, i] <- median(yearDaily$Q, na.rm = TRUE) + annualSeries[2, 4, i] <- stats::median(yearDaily$Q, na.rm = TRUE) annualSeries[2, 5, i] <- mean(yearDaily$Q, na.rm = TRUE) annualSeries[2, 6, i] <- max(yearDaily$Q30, na.rm = TRUE) annualSeries[2, 7, i] <- max(yearDaily$Q7, na.rm = TRUE) @@ -111,7 +111,7 @@ makeAnnualSeries<-function(eList, edgeAdjust = TRUE) { numYears <- length(x) xVec <- seq(1,numYears) xy <- data.frame(x,y,xVec) - xy <- na.omit(xy) + xy <- stats::na.omit(xy) goodYears <- length(xy$x) x <- xy$x x1 <- x[1] @@ -126,9 +126,9 @@ makeAnnualSeries<-function(eList, edgeAdjust = TRUE) { window } w <- triCube(x - xi, thisWindow) - mod <- lm(xy$y ~ x, weights = w) + mod <- stats::lm(xy$y ~ x, weights = w) new <- data.frame(x = x[i]) - z <- exp(predict(mod, new)) + z <- exp(stats::predict(mod, new)) iYear <- xy$xVec[i] annualSeries[3, istat, iYear] <- z } diff --git a/R/plot1of15.R b/R/plot1of15.R index 0c11e70b..1a954b10 100644 --- a/R/plot1of15.R +++ b/R/plot1of15.R @@ -50,5 +50,5 @@ plot1of15<-function(eList, yearStart, yearEnd, qf, istat, axis(2,tcl=0.5,at=yTicks,labels=FALSE) axis(3,tcl=0.5,at=xTicks,labels=FALSE) axis(4,tcl=0.5,at=yTicks,labels=FALSE) - box() + graphics::box() } diff --git a/R/plotConcQSmooth.R b/R/plotConcQSmooth.R index 8bd25adb..f5f4afe2 100644 --- a/R/plotConcQSmooth.R +++ b/R/plotConcQSmooth.R @@ -217,18 +217,18 @@ plotConcQSmooth<-function(eList, cols<-colorVal[index] legendLeft <- if(legendLeft == 0) { - grconvertX(0.05, from="npc", to="user") + graphics::grconvertX(0.05, from="npc", to="user") } else { legendLeft } legendTop <- if(legendTop == 0) { - grconvertY(0.3, from="npc", to="user") + graphics::grconvertY(0.3, from="npc", to="user") } else { legendTop } - if (printLegend) legend(legendLeft,legendTop ,legend=words,lty=ltys,col=cols,lwd=lwd,cex=cex.legend) + if (printLegend) graphics::legend(legendLeft,legendTop ,legend=words,lty=ltys,col=cols,lwd=lwd,cex=cex.legend) printResults<-rep(NA,48*4) dim(printResults)<-c(48,4) diff --git a/R/plotConcTimeSmooth.R b/R/plotConcTimeSmooth.R index d6db436c..85e6a170 100644 --- a/R/plotConcTimeSmooth.R +++ b/R/plotConcTimeSmooth.R @@ -222,16 +222,16 @@ plotConcTimeSmooth<-function (eList, q1, q2, q3, cols <- colorVal[index] legendLeft <- if(legendLeft == 0) { - grconvertX(0.05, from="npc", to="user") + graphics::grconvertX(0.05, from="npc", to="user") } else { legendLeft } if(legendTop == 0) { - legendTop <- grconvertY(0.3, from="npc", to="user") + legendTop <- graphics::grconvertY(0.3, from="npc", to="user") } - if (printLegend) legend(legendLeft,legendTop,legend=words,lty=ltys,col=cols,lwd=lwd,cex=cex.legend) + if (printLegend) graphics::legend(legendLeft,legendTop,legend=words,lty=ltys,col=cols,lwd=lwd,cex=cex.legend) printResults <- rep(NA, numX * 4) dim(printResults) <- c(numX, 4) diff --git a/R/plotContours.R b/R/plotContours.R index 75e32e3f..34a07ff5 100644 --- a/R/plotContours.R +++ b/R/plotContours.R @@ -61,7 +61,7 @@ #' contourLevels = clevel) #' plotContours(eList, yearStart, yearEnd, qBottom, qTop = 50, #' contourLevels = clevel, flowDuration = FALSE) -#' colors <- colorRampPalette(c("white","black")) +#' colors <- grDevices::colorRampPalette(c("white","black")) #' plotContours(eList, yearStart, yearEnd, qBottom, qTop = 50, #' contourLevels = clevel, color.palette = colors, #' flowDuration = FALSE) @@ -75,7 +75,7 @@ plotContours <- function(eList, yearStart, yearEnd, yTicks = NA, tick.lwd = 1, usgsStyle = FALSE, lwd = 2, cex.main = 1, cex.axis = 1, concLab = 1, - color.palette = colorRampPalette(c("white","gray","blue","red")), ...) { + color.palette = grDevices::colorRampPalette(c("white","gray","blue","red")), ...) { localINFO <- getInfo(eList) localDaily <- getDaily(eList) @@ -129,9 +129,9 @@ plotContours <- function(eList, yearStart, yearEnd, numX<-length(x) numY<-length(y) - qBottomT <- ifelse(is.na(qBottom), quantile(localDaily$Q, probs = 0.05)*qFactor, qBottom) + qBottomT <- ifelse(is.na(qBottom), stats::quantile(localDaily$Q, probs = 0.05)*qFactor, qBottom) - qTopT <- ifelse(is.na(qTop), quantile(localDaily$Q, probs = 0.95)*qFactor, qTop) + qTopT <- ifelse(is.na(qTop), stats::quantile(localDaily$Q, probs = 0.95)*qFactor, qTop) if(any(is.na(yTicks))){ @@ -212,28 +212,28 @@ plotContours <- function(eList, yearStart, yearEnd, yLab<-ifelse(usgsStyle,qUnit@unitUSGS,qUnit@qUnitExpress) logY <- log(y,10) - filled.contour(x,log(y,10),surft,levels=contourLevels,xlim=c(yearStart,yearEnd), + graphics::filled.contour(x,log(y,10),surft,levels=contourLevels,xlim=c(yearStart,yearEnd), ylim=c(log(yTicks[1],10),log(yTicks[nYTicks],10)), xaxs="i",yaxs="i", color.palette=color.palette, # ..., plot.axes={ - width <- grconvertX(par("usr")[2],from="user",to="inches") - grconvertX(par("usr")[1],from="user",to="inches") - height <- grconvertY(par("usr")[4],from="user",to="inches") - grconvertY(par("usr")[3],from="user",to="inches") + width <- graphics::grconvertX(par("usr")[2],from="user",to="inches") - graphics::grconvertX(par("usr")[1],from="user",to="inches") + height <- graphics::grconvertY(par("usr")[4],from="user",to="inches") - graphics::grconvertY(par("usr")[3],from="user",to="inches") axis(1,tcl=0,at=xTicks,labels=xlabels,cex.axis=cex.axis) axis(2,tcl=0,las=1,at=log(yTicks,10),labels=yTicks,cex.axis=cex.axis) axis(3, tcl = 0, at = xTicks, labels =FALSE,cex.axis=cex.axis) axis(4, tcl = 0, at = log(yTicks, 10), labels=FALSE,cex.axis=cex.axis) - if(flowDuration) contour(x,log(y,10),durSurf,add=TRUE,drawlabels=FALSE,levels=plevels,lwd=lwd) + if(flowDuration) graphics::contour(x,log(y,10),durSurf,add=TRUE,drawlabels=FALSE,levels=plevels,lwd=lwd) segments(v1[1],v1[2],v1[3],v1[4]) segments(v2[1],v2[2],v2[3],v2[4]) segments(h1[1],h1[2],h1[3],h1[4]) - segments(xTicks, rep(log(yTicks[1],10),length(xTicks)), xTicks, rep(grconvertY(grconvertY(par("usr")[3],from="user",to="inches")+tcl,from="inches",to="user"),length(xTicks)), lwd = tick.lwd) - segments(xTicks, rep(log(yTicks[nYTicks],10),length(xTicks)), xTicks, rep(grconvertY(grconvertY(par("usr")[4],from="user",to="inches")-tcl,from="inches",to="user"),length(xTicks)), lwd = tick.lwd) - segments(rep(yearStart,length(yTicks)), log(yTicks,10), rep(grconvertX(grconvertX(par("usr")[1],from="user",to="inches")+tcl,from="inches",to="user"),length(yTicks)),log(yTicks,10), lwd = tick.lwd) - segments(rep(grconvertX(grconvertX(par("usr")[2],from="user",to="inches")-tcl,from="inches",to="user"),length(yTicks)), log(yTicks,10), rep(yearEnd,length(yTicks)),log(yTicks,10), lwd = tick.lwd) + segments(xTicks, rep(log(yTicks[1],10),length(xTicks)), xTicks, rep(graphics::grconvertY(graphics::grconvertY(par("usr")[3],from="user",to="inches")+tcl,from="inches",to="user"),length(xTicks)), lwd = tick.lwd) + segments(xTicks, rep(log(yTicks[nYTicks],10),length(xTicks)), xTicks, rep(graphics::grconvertY(graphics::grconvertY(par("usr")[4],from="user",to="inches")-tcl,from="inches",to="user"),length(xTicks)), lwd = tick.lwd) + segments(rep(yearStart,length(yTicks)), log(yTicks,10), rep(graphics::grconvertX(graphics::grconvertX(par("usr")[1],from="user",to="inches")+tcl,from="inches",to="user"),length(yTicks)),log(yTicks,10), lwd = tick.lwd) + segments(rep(graphics::grconvertX(graphics::grconvertX(par("usr")[2],from="user",to="inches")-tcl,from="inches",to="user"),length(yTicks)), log(yTicks,10), rep(yearEnd,length(yTicks)),log(yTicks,10), lwd = tick.lwd) }, plot.title = { if(printTitle) { diff --git a/R/plotDiffContours.R b/R/plotDiffContours.R index 247e1b09..9f15a7d2 100644 --- a/R/plotDiffContours.R +++ b/R/plotDiffContours.R @@ -35,7 +35,7 @@ #' @param tcl numeric, length of tick marks in inches, default is 0.1 #' @param tick.lwd line width for axis ticks, default is 2 #' @param color.palette a function that creates a color palette for the contour plot. Default goes from blue to white to red -#' using the function \code{colorRampPalette(c("blue","white","red"))}. A few preset options are heat.colors, topo.colors, and terrain.colors. +#' using the function \code{grDevices::colorRampPalette(c("blue","white","red"))}. A few preset options are heat.colors, topo.colors, and terrain.colors. #' @param customPar logical defaults to FALSE. If TRUE, par() should be set by user before calling this function #' (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins. #' @param usgsStyle logical option to use USGS style guidelines. Setting this option @@ -67,7 +67,7 @@ plotDiffContours<-function (eList, year0, year1, vert1 = NA, vert2 = NA, horiz = NA, flowDuration = TRUE, yTicks=NA,tick.lwd=1, lwd=2,cex.main = 0.95, cex.axis = 1, customPar = FALSE, usgsStyle = FALSE, - color.palette = colorRampPalette(c("blue","white","red")), + color.palette = grDevices::colorRampPalette(c("blue","white","red")), concLab = 1, monthLab = 1, ...) { localINFO <- getInfo(eList) @@ -130,7 +130,7 @@ plotDiffContours<-function (eList, year0, year1, surfaceSpan <- range(maxDiff) } } else { - surfaceSpan <- quantile(difft, c(0.05,0.95)) + surfaceSpan <- stats::quantile(difft, c(0.05,0.95)) } contourLevels <- pretty(surfaceSpan, n = 15) @@ -142,9 +142,9 @@ plotDiffContours<-function (eList, year0, year1, numX <- length(x) numY <- length(y) - qBottomT <- ifelse(is.na(qBottom), quantile(localDaily$Q, probs = 0.05)*qFactor, qBottom) + qBottomT <- ifelse(is.na(qBottom), stats::quantile(localDaily$Q, probs = 0.05)*qFactor, qBottom) - qTopT <- ifelse(is.na(qTop), quantile(localDaily$Q, probs = 0.95)*qFactor, qTop) + qTopT <- ifelse(is.na(qTop), stats::quantile(localDaily$Q, probs = 0.95)*qFactor, qTop) if(any(is.na(yTicks))){ @@ -227,7 +227,7 @@ plotDiffContours<-function (eList, year0, year1, deltaX <- (1)/25 yLab <- ifelse(usgsStyle,qUnit@unitUSGS,qUnit@qUnitExpress) - filled.contour(x, log(y, 10), difft, levels = contourLevels, + graphics::filled.contour(x, log(y, 10), difft, levels = contourLevels, xlim = c(0,1), ylim = c(log(yTicks[1], 10), log(yTicks[nYTicks], 10)), #main = plotTitle, xaxs = "i", yaxs = "i", @@ -237,16 +237,16 @@ plotDiffContours<-function (eList, year0, year1, labels = yTicks, cex.axis=cex.axis) axis(3, tcl = 0, at = xTicks, labels =FALSE) axis(4, tcl = 0, at = log(yTicks, 10), labels=FALSE) - if(flowDuration) contour(x, log(y, 10), durSurf, add = TRUE, drawlabels = FALSE, + if(flowDuration) graphics::contour(x, log(y, 10), durSurf, add = TRUE, drawlabels = FALSE, levels = plevels,lwd=lwd) segments(v1[1], v1[2], v1[3], v1[4]) segments(v2[1], v2[2], v2[3], v2[4]) segments(h1[1], h1[2], h1[3], h1[4]) - segments(xTicks, rep(log(yTicks[1],10),length(xTicks)), xTicks, rep(grconvertY(grconvertY(par("usr")[3],from="user",to="inches")+tcl,from="inches",to="user"),length(xTicks)), lwd = tick.lwd) - segments(xTicks, rep(log(yTicks[nYTicks],10),length(xTicks)), xTicks, rep(grconvertY(grconvertY(par("usr")[4],from="user",to="inches")-tcl,from="inches",to="user"),length(xTicks)), lwd = tick.lwd) - segments(rep(0,length(yTicks)), log(yTicks,10), rep(grconvertX(grconvertX(par("usr")[1],from="user",to="inches")+tcl,from="inches",to="user"),length(yTicks)),log(yTicks,10), lwd = tick.lwd) - segments(rep(grconvertX(grconvertX(par("usr")[2],from="user",to="inches")-tcl,from="inches",to="user"),length(yTicks)), log(yTicks,10), rep(1,length(yTicks)),log(yTicks,10), lwd = tick.lwd) + segments(xTicks, rep(log(yTicks[1],10),length(xTicks)), xTicks, rep(graphics::grconvertY(graphics::grconvertY(par("usr")[3],from="user",to="inches")+tcl,from="inches",to="user"),length(xTicks)), lwd = tick.lwd) + segments(xTicks, rep(log(yTicks[nYTicks],10),length(xTicks)), xTicks, rep(graphics::grconvertY(graphics::grconvertY(par("usr")[4],from="user",to="inches")-tcl,from="inches",to="user"),length(xTicks)), lwd = tick.lwd) + segments(rep(0,length(yTicks)), log(yTicks,10), rep(graphics::grconvertX(graphics::grconvertX(par("usr")[1],from="user",to="inches")+tcl,from="inches",to="user"),length(yTicks)),log(yTicks,10), lwd = tick.lwd) + segments(rep(graphics::grconvertX(graphics::grconvertX(par("usr")[2],from="user",to="inches")-tcl,from="inches",to="user"),length(yTicks)), log(yTicks,10), rep(1,length(yTicks)),log(yTicks,10), lwd = tick.lwd) }, plot.title = { diff --git a/R/plotMonthTrend.R b/R/plotMonthTrend.R index 3dc42dd3..cbbfb6da 100644 --- a/R/plotMonthTrend.R +++ b/R/plotMonthTrend.R @@ -130,8 +130,8 @@ plotMonthTrend <- function(pairResults, yMax = NA, axis(2, at = NULL, labels = TRUE, tick = TRUE) axis(3, at = seq(1, 12), labels = FALSE, tick = TRUE) axis(4, at = NULL, labels = FALSE, tick = TRUE) - abline(h=0, col = "blue", lwd = 1) - box() + graphics::abline(h=0, col = "blue", lwd = 1) + graphics::box() par(new = TRUE) plot(1:12, z2, xlim = c(0.5,12.5), ylim = c(0, yMax), xlab = "", ylab = "", diff --git a/R/plotSDLogQ.R b/R/plotSDLogQ.R index 356c54cc..9799cd72 100644 --- a/R/plotSDLogQ.R +++ b/R/plotSDLogQ.R @@ -70,7 +70,7 @@ plotSDLogQ<-function(eList, yearStart=NA,yearEnd=NA,window=15,sdMax=NA, firstDay<-startDays[i] lastDay<-startDays[i]+window smallDaily<-localDaily[localDaily$DecYear >= firstDay & localDaily$DecYear <= lastDay,] - y[i]<-sd(smallDaily$LogQ,na.rm=TRUE) + y[i] <- stats::sd(smallDaily$LogQ,na.rm=TRUE) } diff --git a/R/populateDaily.r b/R/populateDaily.r index 73b698d8..4ec086aa 100644 --- a/R/populateDaily.r +++ b/R/populateDaily.r @@ -93,7 +93,7 @@ populateDaily <- function(rawData, qConvert, if (length(rawData$dateTime) < 30){ warning("This program requires at least 30 data points. Rolling means will not be calculated.") } else { - ma <- function(x,n=7){filter(x,rep(1/n,n), sides=1)} + ma <- function(x,n=7){stats::filter(x,rep(1/n,n), sides=1)} localDaily$Q7 <- as.numeric(ma(localDaily$Q)) localDaily$Q30 <- as.numeric(ma(localDaily$Q,30)) } diff --git a/R/printSeries.R b/R/printSeries.R index 6c899216..f32309b8 100644 --- a/R/printSeries.R +++ b/R/printSeries.R @@ -59,7 +59,7 @@ printSeries<-function(eList, istat, qUnit = 1, runoff = FALSE) { digits = 4, width = 7) toPrint$qActual <- format(toPrint$qActual, digits = 3, width = 8) toPrint$qSmooth <- format(toPrint$qSmooth, digits=3, width = 8) - write.table(toPrint, file="", + utils::write.table(toPrint, file="", col.names=FALSE, row.names=FALSE, quote=FALSE) diff --git a/R/readDataFromFile.r b/R/readDataFromFile.r index 65f3600b..a2a6d847 100644 --- a/R/readDataFromFile.r +++ b/R/readDataFromFile.r @@ -28,7 +28,7 @@ readDataFromFile <- function (filePath, fileName, format = "%m/%d/%Y"){ totalPath <- file.path(filePath,fileName) if(file.exists(totalPath)){ - retval <- read.delim( + retval <- utils::read.delim( totalPath, header = hasHeader, sep = separator, diff --git a/R/readMetaData.r b/R/readMetaData.r index 288b5adf..230af5ba 100644 --- a/R/readMetaData.r +++ b/R/readMetaData.r @@ -107,7 +107,7 @@ readWQPInfo <- function(siteNumber, parameterCd, interactive=TRUE){ siteInfo$constitAbbrev <- parameterData$parameter_cd } else { - siteInfo <- dataRetrieval::whatWQPsites(siteid=siteNumber, characteristicName=URLencode(parameterCd)) + siteInfo <- dataRetrieval::whatWQPsites(siteid=siteNumber, characteristicName=utils::URLencode(parameterCd)) siteInfo$param.nm <- parameterCd siteInfo$param.units <- "" @@ -233,7 +233,7 @@ readUserInfo <- function(filePath,fileName,hasHeader=TRUE,separator=",",interact totalPath <- file.path(filePath, fileName) if(file.exists(totalPath)){ - siteInfo <- read.delim( + siteInfo <- utils::read.delim( totalPath, header = hasHeader, sep=separator, diff --git a/R/runGroups.R b/R/runGroups.R index 20c9d3d3..c242d890 100644 --- a/R/runGroups.R +++ b/R/runGroups.R @@ -172,6 +172,7 @@ runGroups <- function (eList, windowSide, paStart <- eList$INFO$paStart } else { paStart <- 10 + eList$INFO$paStart <- 10 } } else { eList$INFO$paStart <- paStart @@ -182,6 +183,7 @@ runGroups <- function (eList, windowSide, paLong <- eList$INFO$paLong } else { paLong <- 12 + eList$INFO$paLong <- 12 } } else { eList$INFO$paLong <- paLong diff --git a/R/runPairs.R b/R/runPairs.R index f8c38675..b31ef2dd 100644 --- a/R/runPairs.R +++ b/R/runPairs.R @@ -480,10 +480,10 @@ runPairs <- function(eList, year1, year2, windowSide, k <- c(31, 28.25, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) eList1 <- as.egret(eList$INFO, DailyRS1FD1, eList$Sample) monthlyResults1 <- calculateMonthlyResults(eList1) - monthlyResults1 <- na.omit(monthlyResults1) + monthlyResults1 <- stats::na.omit(monthlyResults1) eList2 <- as.egret(eList$INFO, DailyRS2FD2, eList$Sample) monthlyResults2 <- calculateMonthlyResults(eList2) - monthlyResults2 <- na.omit(monthlyResults2) + monthlyResults2 <- stats::na.omit(monthlyResults2) monthlyResults1$monthFlux <- monthlyResults1$nDays * monthlyResults1$FNFlux / eList$INFO$drainSqKm monthlyResults1$monthConc <- monthlyResults1$FNConc diff --git a/R/runSurvReg.R b/R/runSurvReg.R index d5999d76..c894ce22 100644 --- a/R/runSurvReg.R +++ b/R/runSurvReg.R @@ -193,7 +193,7 @@ run_WRTDS <- function(estY, estLQ, if(inherits(x, "survreg")) { newdf<-data.frame(DecYear=estY,LogQ=estLQ,SinDY=sin(2*pi*estY),CosDY=cos(2*pi*estY)) # extract results at estimation point - yHat<-predict(x,newdf) + yHat<- stats::predict(x,newdf) SE<-x$scale bias<-exp((SE^2)/2) survReg[1]<-yHat @@ -227,11 +227,11 @@ run_WRTDS <- function(estY, estLQ, jitterSam <- function(Sam, V = 0.2) { SamR <- Sam n <- length(Sam$DecYear) - SamR$DecYear <- Sam$DecYear + rnorm(n,0,0.05) + SamR$DecYear <- Sam$DecYear + stats::rnorm(n,0,0.05) SamR$SinDY <- sin(SamR$DecYear * 2 * pi) SamR$CosDY <- cos(SamR$DecYear * 2 * pi) - sdLQ <- sd(Sam$LogQ) + sdLQ <- stats::sd(Sam$LogQ) s <- sdLQ * V - SamR$LogQ <- Sam$LogQ + rnorm(n,0,s) + SamR$LogQ <- Sam$LogQ + stats::rnorm(n,0,s) return(SamR) } diff --git a/R/stitch.R b/R/stitch.R index 2d8e8869..396c7808 100644 --- a/R/stitch.R +++ b/R/stitch.R @@ -115,7 +115,7 @@ stitch <- function(eList, DecLow <- highLow[["DecLow"]] sliceIndex <- which(vectorYear >= decimalDate(surfaceStart) & vectorYear <= decimalDate(surface1End)) - Year <- vectorYear[c(sliceIndex[1] - 1, sliceIndex, tail(sliceIndex, n = 1) + 1)] + Year <- vectorYear[c(sliceIndex[1] - 1, sliceIndex, utils::tail(sliceIndex, n = 1) + 1)] nVectorYear <- length(Year) Year1 <- Year estPtYear <- rep(Year, each = 14) @@ -138,7 +138,7 @@ stitch <- function(eList, DecLow <- highLow[["DecLow"]] sliceIndex <- which(vectorYear >= decimalDate(surface2Start) & vectorYear <= decimalDate(surfaceEnd)) - Year <- vectorYear[c(sliceIndex[1] - 1, sliceIndex, tail(sliceIndex, n = 1) + 1)] + Year <- vectorYear[c(sliceIndex[1] - 1, sliceIndex, utils::tail(sliceIndex, n = 1) + 1)] Year <- Year[!is.na(Year)] nVectorYear <- length(Year) Year2 <- Year diff --git a/R/tableResults.R b/R/tableResults.R index 1ac099af..4da6f39f 100644 --- a/R/tableResults.R +++ b/R/tableResults.R @@ -113,7 +113,7 @@ tableResults<-function(eList, qUnit = 2, fluxUnit = 9, localDaily = NA) { paste0("FN Flux [", fNameNoSpace, "]") ) } - write.table(results,file="",quote=FALSE,col.names=FALSE,row.names=FALSE) + utils::write.table(results,file="",quote=FALSE,col.names=FALSE,row.names=FALSE) origNames <- names(results) results <- data.frame(apply(results, 2, function(x) as.numeric(gsub(" ","", as.character(x))))) diff --git a/man/EGRET-package.Rd b/man/EGRET-package.Rd index bbf3fa59..f0b303c6 100644 --- a/man/EGRET-package.Rd +++ b/man/EGRET-package.Rd @@ -2,6 +2,7 @@ % Please edit documentation in R/EGRET.R \docType{package} \name{EGRET-package} +\alias{EGRET} \alias{EGRET-package} \title{EGRET package includes WRTDS and flowHistory} \description{ @@ -25,11 +26,16 @@ Collection of functions to do WRTDS and flowHistory analysis, Hirsch, R.M., and De Cicco, L.A., 2014, User guide to Exploration and Graphics for RivEr Trends (EGRET) and dataRetrieval: R packages for hydrologic data: U.S. Geological Survey Techniques and Methods book 4, chap. A10, 94 p., \doi{10.3133/tm4A10} +} +\seealso{ +Useful links: +\itemize{ + \item \url{https://pubs.usgs.gov/tm/04/a10/} + \item Report bugs at \url{https://github.com/DOI-USGS/EGRET/issues} +} + } \author{ Robert M. Hirsch \email{rhirsch@usgs.gov}, Laura De Cicco \email{ldecicco@usgs.gov} } -\keyword{graphics} -\keyword{statistics} -\keyword{streamflow} -\keyword{water-quality} +\keyword{internal} diff --git a/man/cumQdate.Rd b/man/cumQdate.Rd index fd8e26ae..a5cb1c5f 100644 --- a/man/cumQdate.Rd +++ b/man/cumQdate.Rd @@ -42,6 +42,6 @@ eList <- Choptank_eList annualFlow <- cumQdate(eList) head(annualFlow) plot(annualFlow) -mod1 <- lm(annualFlow[,2] ~ annualFlow[,1]) +mod1 <- stats::lm(annualFlow[,2] ~ annualFlow[,1]) summary(mod1) } diff --git a/man/plotContours.Rd b/man/plotContours.Rd index a3dc8dfb..1bc3c154 100644 --- a/man/plotContours.Rd +++ b/man/plotContours.Rd @@ -9,8 +9,9 @@ plotContours(eList, yearStart, yearEnd, qBottom = NA, qTop = NA, pval = 0.05, printTitle = TRUE, vert1 = NA, vert2 = NA, horiz = NA, tcl = 0.03, flowDuration = TRUE, customPar = FALSE, yTicks = NA, tick.lwd = 1, usgsStyle = FALSE, lwd = 2, cex.main = 1, - cex.axis = 1, concLab = 1, color.palette = colorRampPalette(c("white", - "gray", "blue", "red")), ...) + cex.axis = 1, concLab = 1, + color.palette = grDevices::colorRampPalette(c("white", "gray", "blue", + "red")), ...) } \arguments{ \item{eList}{named list with at least the Daily and INFO dataframes, and surfaces matrix} @@ -98,7 +99,7 @@ plotContours(eList, yearStart, yearEnd, qBottom, qTop, contourLevels = clevel) plotContours(eList, yearStart, yearEnd, qBottom, qTop = 50, contourLevels = clevel, flowDuration = FALSE) -colors <- colorRampPalette(c("white","black")) +colors <- grDevices::colorRampPalette(c("white","black")) plotContours(eList, yearStart, yearEnd, qBottom, qTop = 50, contourLevels = clevel, color.palette = colors, flowDuration = FALSE) diff --git a/man/plotDiffContours.Rd b/man/plotDiffContours.Rd index 84180435..0a2f45f4 100644 --- a/man/plotDiffContours.Rd +++ b/man/plotDiffContours.Rd @@ -10,8 +10,8 @@ plotDiffContours(eList, year0, year1, qBottom = NA, qTop = NA, vert2 = NA, horiz = NA, flowDuration = TRUE, yTicks = NA, tick.lwd = 1, lwd = 2, cex.main = 0.95, cex.axis = 1, customPar = FALSE, usgsStyle = FALSE, - color.palette = colorRampPalette(c("blue", "white", "red")), concLab = 1, - monthLab = 1, ...) + color.palette = grDevices::colorRampPalette(c("blue", "white", "red")), + concLab = 1, monthLab = 1, ...) } \arguments{ \item{eList}{named list with at least the Daily and INFO dataframes, and surfaces matrix} @@ -66,7 +66,7 @@ to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels.} \item{color.palette}{a function that creates a color palette for the contour plot. Default goes from blue to white to red -using the function \code{colorRampPalette(c("blue","white","red"))}. A few preset options are heat.colors, topo.colors, and terrain.colors.} +using the function \code{grDevices::colorRampPalette(c("blue","white","red"))}. A few preset options are heat.colors, topo.colors, and terrain.colors.} \item{concLab}{object of concUnit class, or numeric represented the short code, or character representing the descriptive name. By default, this argument sets diff --git a/tests/testthat/Rplots.pdf b/tests/testthat/Rplots.pdf index 832e89d59f7ece6af51461b8d504fb1876cc3cfd..44e21285d3e54a82287d2f64e165a52c0035ceb7 100644 GIT binary patch delta 55 zcmeBI>Q|azrfOznVQ6M#X=tY^5ft5pC1 Di`@=5 delta 55 zcmeBI>Q|azrfOtlWN2z?Vrs0(rSF@c;*waBs-WRwWn^GvYyg*=7_Gx>q-V6Tt5pC1 Di46`S From 53dcdafd320425e0ca81e649274a12db8ffe7b77 Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Fri, 25 Oct 2024 15:36:48 -0500 Subject: [PATCH 02/11] Get ready for dataRetrieval changes --- DESCRIPTION | 4 +- NAMESPACE | 1 - NEWS | 6 +++ R/processQWData.r | 9 ++-- R/readNWISSample.r | 111 ------------------------------------------ R/readWQPSample.R | 58 +++++++++++++++++++--- inst/CITATION | 4 +- man/processQWData.Rd | 4 +- man/readNWISSample.Rd | 63 ------------------------ 9 files changed, 66 insertions(+), 194 deletions(-) delete mode 100644 R/readNWISSample.r delete mode 100644 man/readNWISSample.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 50f8ff77..6b3f9085 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: EGRET Type: Package Title: Exploration and Graphics for RivEr Trends -Version: 3.0.9 +Version: 3.0.10 Authors@R: c( person("Robert", "Hirsch", role = c("aut"), email = "rhirsch@usgs.gov", comment=c(ORCID="0000-0002-4534-075X")), @@ -58,6 +58,6 @@ Copyright: This software is in the public domain because it contains materials the United States Department of Interior. For more information, see the official USGS copyright policy at https://www.usgs.gov/information-policies-and-instructions/copyrights-and-credits -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 Roxygen: list(old_usage = TRUE) Encoding: UTF-8 diff --git a/NAMESPACE b/NAMESPACE index ade8afc5..3270461b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -106,7 +106,6 @@ export(randomSubset) export(readDataFromFile) export(readNWISDaily) export(readNWISInfo) -export(readNWISSample) export(readUserDaily) export(readUserInfo) export(readUserSample) diff --git a/NEWS b/NEWS index 70499963..aad632b1 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +EGRET 3.0.10 +=========== +* Removed readNWISSample because the underlying data from NWIS is retired. +* Style updates. + + EGRET 3.0.9 =========== * Bug fix for the monthly concentration trend results in runPairs. diff --git a/R/processQWData.r b/R/processQWData.r index c4233358..75e72905 100644 --- a/R/processQWData.r +++ b/R/processQWData.r @@ -12,9 +12,7 @@ #' @seealso \code{\link[dataRetrieval]{readWQPqw}} #' @examples #' \donttest{ -#' #library(dataRetrieval) -#' -#' #rawWQP <- readWQPqw('21FLEECO_WQX-IMPRGR80','Phosphorus', '', '') +#' #rawWQP <- dataRetrieval::readWQPqw('21FLEECO_WQX-IMPRGR80','Phosphorus', '', '') #' #Sample2 <- processQWData(rawWQP) #' } processQWData <- function(data){ @@ -32,7 +30,8 @@ processQWData <- function(data){ # qualifier[!(is.na(data$DetectionQuantitationLimitMeasure.MeasureValue)) & # data$ResultMeasureValue < data$DetectionQuantitationLimitMeasure.MeasureValue] <- "<" - correctedData <- ifelse((nchar(qualifier)==0),data$ResultMeasureValue,data$DetectionQuantitationLimitMeasure.MeasureValue) + correctedData <- ifelse((nchar(qualifier)==0),data$ResultMeasureValue, + data$DetectionQuantitationLimitMeasure.MeasureValue) test <- data.frame(data$CharacteristicName) @@ -56,7 +55,7 @@ processQWData <- function(data){ "value") test$USGSPCode <- data$USGSPCode - + test$ActivityStartDateTime <- data$ActivityStartDateTime test$ActivityMediaSubdivisionName <- data$ActivityMediaSubdivisionName test$ActivityMediaName <- data$ActivityMediaName test$ResultSampleFractionText <- data$ResultSampleFractionText diff --git a/R/readNWISSample.r b/R/readNWISSample.r deleted file mode 100644 index 0b650eb1..00000000 --- a/R/readNWISSample.r +++ /dev/null @@ -1,111 +0,0 @@ -#' Import NWIS Sample Data for EGRET analysis -#' -#' Imports data from NWIS web service. -#' A list of parameter and statistic codes can be found here: \url{https://help.waterdata.usgs.gov/codes-and-parameters} -#' For raw data, use \code{\link[dataRetrieval]{readNWISqw}} from the dataRetrieval package. -#' This function will retrieve the raw data, and compress it (summing constituents) if -#' more than 1 parameter code is supplied. See -#' section 3.2.4 of the vignette for more details. -#' -#' @param siteNumber character USGS site number. This is usually an 8 digit number -#' @param parameterCd character USGS parameter code. This is usually an 5 digit number. -#' @param startDate character starting date for data retrieval in the form YYYY-MM-DD. -#' Default is empty quotes "" which will retrieve the full period of record. -#' @param endDate character ending date for data retrieval in the form YYYY-MM-DD. -#' Default is empty quotes "" which will retrieve the full period of record. -#' @param verbose logical specifying whether or not to display progress message -#' @keywords data import USGS WRTDS -#' @export -#' @return A data frame 'Sample' with the following columns: -#' \tabular{lll}{ -#' Name \tab Type \tab Description \cr -#' Date \tab Date \tab Date \cr -#' ConcLow \tab numeric \tab Lower limit of concentration \cr -#' ConcHigh \tab numeric \tab Upper limit of concentration \cr -#' Uncen \tab integer \tab Uncensored data (1=TRUE, 0=FALSE) \cr -#' ConcAve \tab numeric \tab Average concentration \cr -#' Julian \tab integer \tab Number of days since Jan. 1, 1850\cr -#' Month \tab integer \tab Month of the year [1-12] \cr -#' Day \tab integer \tab Day of the year [1-366] \cr -#' DecYear \tab numeric \tab Decimal year \cr -#' MonthSeq \tab integer \tab Number of months since January 1, 1850 \cr -#' SinDY \tab numeric \tab Sine of the DecYear \cr -#' CosDY \tab numeric \tab Cosine of the DecYear -#' } -#' @seealso \code{\link{compressData}}, \code{\link{populateSampleColumns}}, -#' \code{\link[dataRetrieval]{readNWISqw}} -#' @examples -#' \donttest{ -#' # These examples require an internet connection to run -#' -#' Sample_01075 <- readNWISSample('01594440','01075', '1985-01-01', '1985-03-31') -#' } -readNWISSample <- function(siteNumber, - parameterCd, - startDate = "", - endDate = "", - verbose = TRUE){ - - - multi_pcodes <- length(parameterCd) > 1 - if(multi_pcodes){ - rawSample <- dataRetrieval::readNWISqw(siteNumber, - parameterCd, - startDate,endDate, - expanded = FALSE) - dataColumns <- grep("p\\d{5}",names(rawSample)) - remarkColumns <- grep("r\\d{5}",names(rawSample)) - totalColumns <-c(grep("sample_dt",names(rawSample)), - dataColumns, remarkColumns) - totalColumns <- totalColumns[order(totalColumns)] - extras <- rawSample[, c("medium_cd")] - - } else { - rawSample <- dataRetrieval::readNWISqw(siteNumber, - parameterCd, - startDate,endDate, - expanded = TRUE) - totalColumns <- c("sample_dt", "remark_cd", "result_va") - - extras <- rawSample[, c("sample_dt", "medium_cd", "hyd_cond_cd", "samp_type_cd", - "hyd_event_cd", "dqi_cd", "rpt_lev_cd")] - - if(length(unique(rawSample$medium_cd)) > 1){ - message("More than one medium_cd returned") - } - - } - - - if(nrow(rawSample) > 0){ - compressedData <- compressData(rawSample[,totalColumns], - verbose = verbose) - - Sample <- populateSampleColumns(compressedData) - if(!multi_pcodes){ - Sample <- merge(x = Sample, y = extras, - by.x = "Date", - by.y = "sample_dt", - all.x = TRUE) - } - - } else { - Sample <- data.frame(Date = as.Date(character()), - ConcLow = numeric(), - ConcHigh = numeric(), - Uncen = numeric(), - ConcAve = numeric(), - Julian = numeric(), - Month = numeric(), - Day = numeric(), - DecYear = numeric(), - MonthSeq = numeric(), - SinDY = numeric(), - CosDY = numeric(), - stringsAsFactors = FALSE) - } - - return(Sample) -} - - diff --git a/R/readWQPSample.R b/R/readWQPSample.R index be5e23f3..4d5d48fe 100644 --- a/R/readWQPSample.R +++ b/R/readWQPSample.R @@ -44,15 +44,59 @@ readWQPSample <- function(siteNumber, endDate = "", verbose = TRUE){ - url <- dataRetrieval::constructWQPURL(siteNumber,characteristicName,startDate,endDate) - retval <- dataRetrieval::importWQP(url) - if(nrow(retval) > 0){ - if(nrow(retval) > 0){ - data <- processQWData(retval) - } else { - data <- NULL + if(packageVersion("dataRetrieval") >= "2.7.17"){ + data <- suppressMessages(dataRetrieval::readWQPqw(siteNumbers = siteNumber, + parameterCd = characteristicName, + startDate = startDate, + endDate = endDate, + ignore_attributes = TRUE, + legacy = FALSE) ) + + conversion_names <- data.frame(legacy_names = c("ResultDetectionConditionText", + "ResultMeasureValue", + "DetectionQuantitationLimitMeasure.MeasureValue", + "CharacteristicName", + "ActivityStartDate", + "ActivityStartDateTime", + "USGSPCode", + "ActivityMediaSubdivisionName", + "ActivityMediaName", + "ResultSampleFractionText", + "ResultStatusIdentifier", + "ResultValueTypeName"), + new_names = c("Result_ResultDetectionCondition", + "Result_Measure", + "DetectionLimit_TypeA", + "Result_Characteristic", + "Activity_StartDate", + "Activity_StartDateTime", + "USGSpcode", + "Activity_MediaSubdivisionName", + "Activity_Media", + "Result_SampleFraction", + "Result_MeasureStatusIdentifier", + "Result_MeasureType")) + + for(i in seq_len(nrow(conversion_names))){ + names(data)[which(names(data) == conversion_names$new_names[i])] <- conversion_names$legacy_names[i] } + + } else { + data <- dataRetrieval::readWQPqw(siteNumbers = siteNumber, + parameterCd = characteristicName, + startDate = startDate, + endDate = endDate, + ignore_attributes = TRUE) + } + + if(nrow(data) == 0){ + warning("No data returned") + } + + if(nrow(data) > 0){ + + data <- processQWData(data) compressedData <- compressData(data[, c("dateTime", "qualifier", diff --git a/inst/CITATION b/inst/CITATION index cc4a258c..c5aa5681 100644 --- a/inst/CITATION +++ b/inst/CITATION @@ -12,8 +12,8 @@ bibentry(bibtype = "Manual", comment=c(ORCID="0000-0002-0881-0919"))), title = "Exploration and Graphics for RivEr Trends (EGRET)", publisher = "U.S. Geological Survey", - year = 2023, + year = 2024, url = "https://pubs.usgs.gov/tm/04/a10/", - textVersion = "Hirsch, R.M., De Cicco, L.A., Murphy, J., 2023, Exploration and Graphics for RivEr Trends (EGRET), version 3.0.9, doi:10.5066/P9CC9JEX" + textVersion = "Hirsch, R.M., De Cicco, L.A., Murphy, J., 2024, Exploration and Graphics for RivEr Trends (EGRET), version 3.0.10, doi:10.5066/P9CC9JEX" ) diff --git a/man/processQWData.Rd b/man/processQWData.Rd index 26f1262a..7c491de7 100644 --- a/man/processQWData.Rd +++ b/man/processQWData.Rd @@ -20,9 +20,7 @@ conditions to determine if a value is left censored or not. Censored values are } \examples{ \donttest{ -#library(dataRetrieval) - -#rawWQP <- readWQPqw('21FLEECO_WQX-IMPRGR80','Phosphorus', '', '') +#rawWQP <- dataRetrieval::readWQPqw('21FLEECO_WQX-IMPRGR80','Phosphorus', '', '') #Sample2 <- processQWData(rawWQP) } } diff --git a/man/readNWISSample.Rd b/man/readNWISSample.Rd deleted file mode 100644 index d1bb905a..00000000 --- a/man/readNWISSample.Rd +++ /dev/null @@ -1,63 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/readNWISSample.r -\name{readNWISSample} -\alias{readNWISSample} -\title{Import NWIS Sample Data for EGRET analysis} -\usage{ -readNWISSample(siteNumber, parameterCd, startDate = "", endDate = "", - verbose = TRUE) -} -\arguments{ -\item{siteNumber}{character USGS site number. This is usually an 8 digit number} - -\item{parameterCd}{character USGS parameter code. This is usually an 5 digit number.} - -\item{startDate}{character starting date for data retrieval in the form YYYY-MM-DD. -Default is empty quotes "" which will retrieve the full period of record.} - -\item{endDate}{character ending date for data retrieval in the form YYYY-MM-DD. -Default is empty quotes "" which will retrieve the full period of record.} - -\item{verbose}{logical specifying whether or not to display progress message} -} -\value{ -A data frame 'Sample' with the following columns: -\tabular{lll}{ -Name \tab Type \tab Description \cr -Date \tab Date \tab Date \cr -ConcLow \tab numeric \tab Lower limit of concentration \cr -ConcHigh \tab numeric \tab Upper limit of concentration \cr -Uncen \tab integer \tab Uncensored data (1=TRUE, 0=FALSE) \cr -ConcAve \tab numeric \tab Average concentration \cr -Julian \tab integer \tab Number of days since Jan. 1, 1850\cr -Month \tab integer \tab Month of the year [1-12] \cr -Day \tab integer \tab Day of the year [1-366] \cr -DecYear \tab numeric \tab Decimal year \cr -MonthSeq \tab integer \tab Number of months since January 1, 1850 \cr -SinDY \tab numeric \tab Sine of the DecYear \cr -CosDY \tab numeric \tab Cosine of the DecYear -} -} -\description{ -Imports data from NWIS web service. -A list of parameter and statistic codes can be found here: \url{https://help.waterdata.usgs.gov/codes-and-parameters} -For raw data, use \code{\link[dataRetrieval]{readNWISqw}} from the dataRetrieval package. -This function will retrieve the raw data, and compress it (summing constituents) if -more than 1 parameter code is supplied. See -section 3.2.4 of the vignette for more details. -} -\examples{ -\donttest{ -# These examples require an internet connection to run - -Sample_01075 <- readNWISSample('01594440','01075', '1985-01-01', '1985-03-31') -} -} -\seealso{ -\code{\link{compressData}}, \code{\link{populateSampleColumns}}, -\code{\link[dataRetrieval]{readNWISqw}} -} -\keyword{USGS} -\keyword{WRTDS} -\keyword{data} -\keyword{import} From 2ecb8eed2afb881a1142cc7cfcae86228a520b40 Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Fri, 25 Oct 2024 15:46:54 -0500 Subject: [PATCH 03/11] Fixes #382 --- R/errorStats.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/errorStats.R b/R/errorStats.R index 7ae18517..2242d78a 100644 --- a/R/errorStats.R +++ b/R/errorStats.R @@ -22,7 +22,7 @@ errorStats <- function(eList) { eListR <- makeAugmentedSample(eList) Sample <- eListR$Sample - # n <- length(Sample$Date) + Sample$Pred <- log(Sample$rObserved) - Sample$rResid Sample$trueFlux <- Sample$rObserved * Sample$Q * 86.4 Sample$trueLogF <- log(Sample$trueFlux) From de4ea928e680929abee0c1c5ef329be4d1bdb073 Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Fri, 25 Oct 2024 17:03:48 -0500 Subject: [PATCH 04/11] Fixes #381 --- R/compressData.r | 29 +++++++++------- R/populateSampleColumns.r | 7 ++-- R/readUserSample.r | 6 ++++ R/readWQPSample.R | 72 +++++++++++++++++++++------------------ 4 files changed, 65 insertions(+), 49 deletions(-) diff --git a/R/compressData.r b/R/compressData.r index 109bce5d..dcbbed45 100644 --- a/R/compressData.r +++ b/R/compressData.r @@ -51,24 +51,28 @@ compressData <- function(data, verbose = TRUE){ i <- i + 1 } - names(data) <- c('dateTime', 'code', 'value') - returnDataFrame <- as.data.frame(matrix(ncol=3,nrow=nrow(data))) - names(returnDataFrame) <- c('dateTime', 'ConcLow', 'ConcHigh') + names(data)[1:3] <- c('dateTime', 'code', 'value') data$dateTime <- as.character(data$dateTime) if(dateFormatCheck(data$dateTime)){ - returnDataFrame$dateTime <- as.Date(data$dateTime) + data$dateTime <- as.Date(data$dateTime) } else { data$dateTime <- as.Date(data$dateTime,format="%m/%d/%Y") - returnDataFrame$dateTime <- as.Date(data$dateTime,format="%m/%d/%Y") } - returnDataFrame$ConcLow <- as.numeric(lowConcentration) - returnDataFrame$ConcHigh <- as.numeric(highConcentration) - Uncen1<-ifelse(returnDataFrame$ConcLow==returnDataFrame$ConcHigh,1,0) - returnDataFrame$Uncen<-ifelse(is.na(returnDataFrame$ConcLow)|is.na(returnDataFrame$ConcHigh),0,Uncen1) + + + data$ConcLow <- as.numeric(lowConcentration) + data$ConcHigh <- as.numeric(highConcentration) + Uncen1<-ifelse(data$ConcLow==data$ConcHigh,1,0) + data$Uncen<-ifelse(is.na(data$ConcLow)|is.na(data$ConcHigh),0,Uncen1) - flaggedData1 <- returnDataFrame[(returnDataFrame$ConcLow == 0 & returnDataFrame$ConcHigh == 0),] - returnDataFrame <- returnDataFrame[!(returnDataFrame$ConcLow == 0 & returnDataFrame$ConcHigh == 0),] + return(data) +} + + +remove_zeros <- function(data, verbose){ + flaggedData1 <- data[(data$ConcLow == 0 & data$ConcHigh == 0),] + data <- data[!(data$ConcLow == 0 & data$ConcHigh == 0),] if (nrow(flaggedData1) > 0){ WarningMessage <- paste("Deleted", nrow(flaggedData1), "rows of data because concentration was reported as 0.0, the program is unable to interpret that result and is therefore deleting it.") @@ -78,6 +82,5 @@ compressData <- function(data, verbose = TRUE){ print(flaggedData1) } } - - return(returnDataFrame) + return(data) } diff --git a/R/populateSampleColumns.r b/R/populateSampleColumns.r index 6f2f92c2..02faacb1 100644 --- a/R/populateSampleColumns.r +++ b/R/populateSampleColumns.r @@ -14,8 +14,8 @@ #' dataInput <- data.frame(dateTime, ConcLow, ConcHigh, Uncen, stringsAsFactors=FALSE) #' Sample <- populateSampleColumns(dataInput) populateSampleColumns <- function(rawData){ # rawData is a dataframe with dateTime, ConcLow, ConcHigh, Uncen - Sample <- as.data.frame(matrix(ncol=3,nrow=length(rawData$dateTime))) - colnames(Sample) <- c('Date', 'ConcLow','ConcHigh') + Sample <- rawData + Sample$Date <- rawData$dateTime Sample$ConcLow <- rawData$ConcLow Sample$ConcHigh <- rawData$ConcHigh @@ -29,6 +29,7 @@ populateSampleColumns <- function(rawData){ # rawData is a dataframe with dateT Sample$SinDY <- sin(2*pi*Sample$DecYear) Sample$CosDY <- cos(2*pi*Sample$DecYear) - # Sample2 <- subset(Sample, (!is.na(Sample$ConcHigh))) # Was just ConcHigh..... + + Sample <- Sample[,names(Sample)[!names(Sample) %in% c("code", "value")]] return (Sample) } diff --git a/R/readUserSample.r b/R/readUserSample.r index cc2546f8..7146eeda 100644 --- a/R/readUserSample.r +++ b/R/readUserSample.r @@ -54,6 +54,12 @@ readUserSample <- function (filePath, fileName, format = format) compressedData <- compressData(data, verbose = verbose) + compressedData <- remove_zeros(compressedData, verbose = verbose) Sample <- populateSampleColumns(compressedData) + orig_Sample <- c("Date", "ConcLow", "ConcHigh", "Uncen", "ConcAve", + "Julian", "Month", "Day", "DecYear", "waterYear", "MonthSeq", + "SinDY", "CosDY") + Sample <- Sample[, c(orig_Sample, names(Sample)[!names(Sample) %in% orig_Sample])] + Sample <- Sample[order(Sample$Date), ] return(Sample) } diff --git a/R/readWQPSample.R b/R/readWQPSample.R index 4d5d48fe..b6e0e9e3 100644 --- a/R/readWQPSample.R +++ b/R/readWQPSample.R @@ -44,7 +44,14 @@ readWQPSample <- function(siteNumber, endDate = "", verbose = TRUE){ - + extra_cols <- c("ActivityStartDateTime", + "USGSPCode", + "ActivityMediaSubdivisionName", + "ActivityMediaName", + "ResultSampleFractionText", + "ResultStatusIdentifier", + "ResultValueTypeName") + if(packageVersion("dataRetrieval") >= "2.7.17"){ data <- suppressMessages(dataRetrieval::readWQPqw(siteNumbers = siteNumber, parameterCd = characteristicName, @@ -54,29 +61,23 @@ readWQPSample <- function(siteNumber, legacy = FALSE) ) conversion_names <- data.frame(legacy_names = c("ResultDetectionConditionText", - "ResultMeasureValue", - "DetectionQuantitationLimitMeasure.MeasureValue", - "CharacteristicName", - "ActivityStartDate", - "ActivityStartDateTime", - "USGSPCode", - "ActivityMediaSubdivisionName", - "ActivityMediaName", - "ResultSampleFractionText", - "ResultStatusIdentifier", - "ResultValueTypeName"), - new_names = c("Result_ResultDetectionCondition", - "Result_Measure", - "DetectionLimit_TypeA", - "Result_Characteristic", - "Activity_StartDate", - "Activity_StartDateTime", - "USGSpcode", - "Activity_MediaSubdivisionName", - "Activity_Media", - "Result_SampleFraction", - "Result_MeasureStatusIdentifier", - "Result_MeasureType")) + "ResultMeasureValue", + "DetectionQuantitationLimitMeasure.MeasureValue", + "CharacteristicName", + "ActivityStartDate", + extra_cols), + new_names = c("Result_ResultDetectionCondition", + "Result_Measure", + "DetectionLimit_MeasureA", + "Result_Characteristic", + "Activity_StartDate", + "Activity_StartDateTime", + "USGSpcode", + "Activity_MediaSubdivisionName", + "Activity_Media", + "Result_SampleFraction", + "Result_MeasureStatusIdentifier", + "Result_MeasureType")) for(i in seq_len(nrow(conversion_names))){ names(data)[which(names(data) == conversion_names$new_names[i])] <- conversion_names$legacy_names[i] @@ -97,15 +98,20 @@ readWQPSample <- function(siteNumber, if(nrow(data) > 0){ data <- processQWData(data) + first_three <- c("dateTime", + "qualifier", + "value") + compressedData <- compressData(data[, first_three], + verbose = verbose) + combined_data <- cbind(compressedData, data[, names(data)[!names(data) %in% first_three]]) + combined_data <- remove_zeros(combined_data, verbose = verbose) - compressedData <- compressData(data[, c("dateTime", - "qualifier", - "value")], - verbose=verbose) - Sample <- populateSampleColumns(compressedData) - Sample <- cbind(Sample, data[, names(data)[!names(data) %in% c("dateTime", - "qualifier", - "value")]]) + Sample <- populateSampleColumns(combined_data) + orig_Sample <- c("Date", "ConcLow", "ConcHigh", "Uncen", "ConcAve", + "Julian", "Month", "Day", "DecYear", "waterYear", "MonthSeq", + "SinDY", "CosDY") + Sample <- Sample[, c(orig_Sample, names(Sample)[!names(Sample) %in% orig_Sample])] + Sample <- Sample[order(Sample$Date), ] } else { Sample <- data.frame(Date=as.Date(character()), ConcLow=numeric(), @@ -121,6 +127,6 @@ readWQPSample <- function(siteNumber, CosDY=numeric(), stringsAsFactors=FALSE) } - Sample <- Sample[order(Sample$Date), ] + return(Sample) } From 73da2f1daa6b7a74b3eb2e41b43ba0ec31a5f48b Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Fri, 25 Oct 2024 17:07:56 -0500 Subject: [PATCH 05/11] white EGRET font --- _pkgdown.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_pkgdown.yml b/_pkgdown.yml index 3f776272..ef8b0396 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -13,7 +13,10 @@ template: nav-link-color: "white" nav-link-hover-color: "#a9a9a9" navbar-light-brand-hover-color: "white" + navbar-light-brand-color: "white" navbar-light-hover-color: "white" + nav-text-color: "white" + nav-text-light-color: "white" text-muted: "white" pkgdown-nav-height: 125px From 986514f21e00d18620c6ba16f97ee7791773994d Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Sat, 26 Oct 2024 07:55:17 -0500 Subject: [PATCH 06/11] put readNWISSample back in, but send to WQP --- NAMESPACE | 1 + NEWS | 3 +- R/EGRET.R | 8 ++--- R/boxConcMonth.R | 2 +- R/boxQTwice.R | 2 +- R/boxResidMonth.R | 2 +- R/readNWISSample.R | 61 ++++++++++++++++++++++++++++++++ R/readWQPSample.R | 2 +- man/Constants.Rd | 8 ++--- man/boxConcMonth.Rd | 2 +- man/boxQTwice.Rd | 2 +- man/boxResidMonth.Rd | 2 +- man/readNWISSample.Rd | 63 ++++++++++++++++++++++++++++++++++ tests/testthat/tests_imports.R | 33 +++++++++--------- tests/testthat/tests_utils.R | 6 ++-- 15 files changed, 161 insertions(+), 36 deletions(-) create mode 100644 R/readNWISSample.R create mode 100644 man/readNWISSample.Rd diff --git a/NAMESPACE b/NAMESPACE index 3270461b..ade8afc5 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -106,6 +106,7 @@ export(randomSubset) export(readDataFromFile) export(readNWISDaily) export(readNWISInfo) +export(readNWISSample) export(readUserDaily) export(readUserInfo) export(readUserSample) diff --git a/NEWS b/NEWS index aad632b1..0f061074 100644 --- a/NEWS +++ b/NEWS @@ -1,7 +1,8 @@ EGRET 3.0.10 =========== -* Removed readNWISSample because the underlying data from NWIS is retired. +* Fix bug with 0 concentration values in readWQPSample. * Style updates. +* Port readNWISSample to Water Quality Portal. NWIS services are retired. EGRET 3.0.9 diff --git a/R/EGRET.R b/R/EGRET.R index 53b53e29..d668d4d3 100644 --- a/R/EGRET.R +++ b/R/EGRET.R @@ -62,10 +62,10 @@ NULL #' Constants included with EGRET #' -#'\itemize{ -#' \item{fluxConst}{Flux conversion object} -#' \item{qConst}{Flow conversion object} -#' \item{monthInfo}{Month object} +#'\tabular{ll}{ +#' fluxConst \tab Flux conversion object\cr +#' qConst \tab Flow conversion object\cr +#' monthInfo \tab Month object\cr #'} #' #'@aliases fluxConst qConst monthInfo concConst diff --git a/R/boxConcMonth.R b/R/boxConcMonth.R index 448962cf..1a8a315d 100644 --- a/R/boxConcMonth.R +++ b/R/boxConcMonth.R @@ -17,7 +17,7 @@ #' @param tinyPlot logical variable, if TRUE plot is designed to be plotted small as part of a multi-plot figure, default is FALSE. #' @param logScale logical if TRUE y plotted in log axis #' @param customPar logical defaults to FALSE. If TRUE, par() should be set by user before calling this function -#' @param las numeric in {0,1,2,3}; the style of axis labels, see ?par +#' @param las numeric in c(0,1,2,3); the style of axis labels, see ?par #' @param showXLabels logical defaults to TRUE. If FALSE, the x axis label is not plotted #' @param showYLabels logical defaults to TRUE. If FALSE, the y axis label is not plotted #' @param showXAxis logical defaults to TRUE. If FALSE, the x axis is not plotted diff --git a/R/boxQTwice.R b/R/boxQTwice.R index 01d57b23..9bfdfd50 100644 --- a/R/boxQTwice.R +++ b/R/boxQTwice.R @@ -27,7 +27,7 @@ #' @param logScale logical if TRUE y plotted in log axis. Defaults to TRUE. #' @param tinyPlot logical variable, if TRUE plot is designed to be plotted small as part of a multi-plot figure, default is FALSE. #' @param customPar logical defaults to FALSE. If TRUE, par() should be set by user before calling this function -#' @param las numeric in {0,1,2,3}; the style of axis labels, see ?par +#' @param las numeric in c(0,1,2,3); the style of axis labels, see ?par #' @param usgsStyle logical option to use USGS style guidelines. Setting this option #' to TRUE does NOT guarantee USGS compliance. It will only change automatically #' generated labels. diff --git a/R/boxResidMonth.R b/R/boxResidMonth.R index be458018..e635be0f 100644 --- a/R/boxResidMonth.R +++ b/R/boxResidMonth.R @@ -21,7 +21,7 @@ #' @param cex.main magnification to be used for main titles relative to the current setting of cex #' @param font.main font to be used for plot main titles #' @param customPar logical defaults to FALSE. If TRUE, par() should be set by user before calling this function -#' @param las numeric in {0,1,2,3}; the style of axis labels +#' @param las numeric in c(0,1,2,3); the style of axis labels #' @param randomCensored logical. Show censored residuals as randomized. Default = FALSE. #' @param monthLab object of monthLabel class, or numeric represented the short code, #' or character representing the descriptive name. diff --git a/R/readNWISSample.R b/R/readNWISSample.R new file mode 100644 index 00000000..331e8e16 --- /dev/null +++ b/R/readNWISSample.R @@ -0,0 +1,61 @@ +#' Import NWIS Sample Data for EGRET analysis +#' +#' Imports data from NWIS web service. +#' A list of parameter and statistic codes can be found here: \url{https://help.waterdata.usgs.gov/codes-and-parameters} +#' For raw data, use \code{\link[dataRetrieval]{readNWISqw}} from the dataRetrieval package. +#' This function will retrieve the raw data, and compress it (summing constituents) if +#' more than 1 parameter code is supplied. See +#' section 3.2.4 of the vignette for more details. +#' +#' @param siteNumber character USGS site number. This is usually an 8 digit number +#' @param parameterCd character USGS parameter code. This is usually an 5 digit number. +#' @param startDate character starting date for data retrieval in the form YYYY-MM-DD. +#' Default is empty quotes "" which will retrieve the full period of record. +#' @param endDate character ending date for data retrieval in the form YYYY-MM-DD. +#' Default is empty quotes "" which will retrieve the full period of record. +#' @param verbose logical specifying whether or not to display progress message +#' @keywords data import USGS WRTDS +#' @export +#' @return A data frame 'Sample' with the following columns: +#' \tabular{lll}{ +#' Name \tab Type \tab Description \cr +#' Date \tab Date \tab Date \cr +#' ConcLow \tab numeric \tab Lower limit of concentration \cr +#' ConcHigh \tab numeric \tab Upper limit of concentration \cr +#' Uncen \tab integer \tab Uncensored data (1=TRUE, 0=FALSE) \cr +#' ConcAve \tab numeric \tab Average concentration \cr +#' Julian \tab integer \tab Number of days since Jan. 1, 1850\cr +#' Month \tab integer \tab Month of the year [1-12] \cr +#' Day \tab integer \tab Day of the year [1-366] \cr +#' DecYear \tab numeric \tab Decimal year \cr +#' MonthSeq \tab integer \tab Number of months since January 1, 1850 \cr +#' SinDY \tab numeric \tab Sine of the DecYear \cr +#' CosDY \tab numeric \tab Cosine of the DecYear +#' } +#' @seealso \code{\link{compressData}}, \code{\link{populateSampleColumns}}, +#' \code{\link[dataRetrieval]{readNWISqw}} +#' @examples +#' \donttest{ +#' # These examples require an internet connection to run +#' +#' Sample_01075 <- readNWISSample('01594440','01075', '1985-01-01', '1985-03-31') +#' } +readNWISSample <- function(siteNumber, + parameterCd, + startDate = "", + endDate = "", + verbose = TRUE){ + + + siteNumber <- paste0("USGS-", siteNumber) + + Sample <- readWQPSample(siteNumber = siteNumber, + characteristicName = parameterCd, + startDate = startDate, + endDate = endDate, + verbose = verbose) + + return(Sample) + +} + diff --git a/R/readWQPSample.R b/R/readWQPSample.R index b6e0e9e3..96054e47 100644 --- a/R/readWQPSample.R +++ b/R/readWQPSample.R @@ -52,7 +52,7 @@ readWQPSample <- function(siteNumber, "ResultStatusIdentifier", "ResultValueTypeName") - if(packageVersion("dataRetrieval") >= "2.7.17"){ + if(utils::packageVersion("dataRetrieval") >= "2.7.17"){ data <- suppressMessages(dataRetrieval::readWQPqw(siteNumbers = siteNumber, parameterCd = characteristicName, startDate = startDate, diff --git a/man/Constants.Rd b/man/Constants.Rd index 256445e4..7fcdd2cc 100644 --- a/man/Constants.Rd +++ b/man/Constants.Rd @@ -9,10 +9,10 @@ \alias{concConst} \title{Constants included with EGRET} \description{ -\itemize{ - \item{fluxConst}{Flux conversion object} - \item{qConst}{Flow conversion object} - \item{monthInfo}{Month object} +\tabular{ll}{ +fluxConst \tab Flux conversion object\cr +qConst \tab Flow conversion object\cr +monthInfo \tab Month object\cr } } \examples{ diff --git a/man/boxConcMonth.Rd b/man/boxConcMonth.Rd index c582aa75..9ccb981e 100644 --- a/man/boxConcMonth.Rd +++ b/man/boxConcMonth.Rd @@ -21,7 +21,7 @@ boxConcMonth(eList, printTitle = TRUE, cex = 0.8, cex.axis = 1.1, \item{cex.main}{magnification to be used for main titles relative to the current setting of cex} -\item{las}{numeric in {0,1,2,3}; the style of axis labels, see ?par} +\item{las}{numeric in c(0,1,2,3); the style of axis labels, see ?par} \item{logScale}{logical if TRUE y plotted in log axis} diff --git a/man/boxQTwice.Rd b/man/boxQTwice.Rd index 52c51246..a081b048 100644 --- a/man/boxQTwice.Rd +++ b/man/boxQTwice.Rd @@ -25,7 +25,7 @@ boxQTwice(eList, printTitle = TRUE, qUnit = 2, cex = 0.8, \item{tcl}{number defaults to 0.5, specifies length of tick marks as fraction of height of a line of text} -\item{las}{numeric in {0,1,2,3}; the style of axis labels, see ?par} +\item{las}{numeric in c(0,1,2,3); the style of axis labels, see ?par} \item{tinyPlot}{logical variable, if TRUE plot is designed to be plotted small as part of a multi-plot figure, default is FALSE.} diff --git a/man/boxResidMonth.Rd b/man/boxResidMonth.Rd index ccc30a1c..2e631196 100644 --- a/man/boxResidMonth.Rd +++ b/man/boxResidMonth.Rd @@ -14,7 +14,7 @@ boxResidMonth(eList, stdResid = FALSE, las = 1, printTitle = TRUE, \item{stdResid}{logical variable, if TRUE it uses the standardized residual, if FALSE it uses the actual, default is FALSE} -\item{las}{numeric in {0,1,2,3}; the style of axis labels} +\item{las}{numeric in c(0,1,2,3); the style of axis labels} \item{printTitle}{logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure)} diff --git a/man/readNWISSample.Rd b/man/readNWISSample.Rd new file mode 100644 index 00000000..7a6dcd52 --- /dev/null +++ b/man/readNWISSample.Rd @@ -0,0 +1,63 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/readNWISSample.R +\name{readNWISSample} +\alias{readNWISSample} +\title{Import NWIS Sample Data for EGRET analysis} +\usage{ +readNWISSample(siteNumber, parameterCd, startDate = "", endDate = "", + verbose = TRUE) +} +\arguments{ +\item{siteNumber}{character USGS site number. This is usually an 8 digit number} + +\item{parameterCd}{character USGS parameter code. This is usually an 5 digit number.} + +\item{startDate}{character starting date for data retrieval in the form YYYY-MM-DD. +Default is empty quotes "" which will retrieve the full period of record.} + +\item{endDate}{character ending date for data retrieval in the form YYYY-MM-DD. +Default is empty quotes "" which will retrieve the full period of record.} + +\item{verbose}{logical specifying whether or not to display progress message} +} +\value{ +A data frame 'Sample' with the following columns: +\tabular{lll}{ +Name \tab Type \tab Description \cr +Date \tab Date \tab Date \cr +ConcLow \tab numeric \tab Lower limit of concentration \cr +ConcHigh \tab numeric \tab Upper limit of concentration \cr +Uncen \tab integer \tab Uncensored data (1=TRUE, 0=FALSE) \cr +ConcAve \tab numeric \tab Average concentration \cr +Julian \tab integer \tab Number of days since Jan. 1, 1850\cr +Month \tab integer \tab Month of the year [1-12] \cr +Day \tab integer \tab Day of the year [1-366] \cr +DecYear \tab numeric \tab Decimal year \cr +MonthSeq \tab integer \tab Number of months since January 1, 1850 \cr +SinDY \tab numeric \tab Sine of the DecYear \cr +CosDY \tab numeric \tab Cosine of the DecYear +} +} +\description{ +Imports data from NWIS web service. +A list of parameter and statistic codes can be found here: \url{https://help.waterdata.usgs.gov/codes-and-parameters} +For raw data, use \code{\link[dataRetrieval]{readNWISqw}} from the dataRetrieval package. +This function will retrieve the raw data, and compress it (summing constituents) if +more than 1 parameter code is supplied. See +section 3.2.4 of the vignette for more details. +} +\examples{ +\donttest{ +# These examples require an internet connection to run + +Sample_01075 <- readNWISSample('01594440','01075', '1985-01-01', '1985-03-31') +} +} +\seealso{ +\code{\link{compressData}}, \code{\link{populateSampleColumns}}, +\code{\link[dataRetrieval]{readNWISqw}} +} +\keyword{USGS} +\keyword{WRTDS} +\keyword{data} +\keyword{import} diff --git a/tests/testthat/tests_imports.R b/tests/testthat/tests_imports.R index 16bafc9c..11acf8c4 100644 --- a/tests/testthat/tests_imports.R +++ b/tests/testthat/tests_imports.R @@ -27,25 +27,25 @@ test_that("External NWIS Sample tests", { SampleNames <- c("Date","ConcLow","ConcHigh","Uncen","ConcAve","Julian","Month", "Day","DecYear","MonthSeq","waterYear","SinDY","CosDY") - expect_warning(Sample_01075 <- readNWISSample('01594440', + Sample_01075 <- readNWISSample('01594440', '01075', '1985-01-01', - '1985-03-31')) + '1985-03-31') expect_true(all(SampleNames %in% names(Sample_01075))) - expect_warning(Sample_All2 <- readNWISSample('05114000', + Sample_All2 <- readNWISSample('05114000', c('00915','00931'), '1985-01-01', - '1985-03-31')) + '1985-03-31') expect_true(all(SampleNames %in% names(Sample_All2))) - Sample_Select <- expect_warning(readNWISSample('05114000', + Sample_Select <- readNWISSample('05114000', c('00915','00931'), - '', '')) + '', '') - expect_true(all(names(Sample_Select) %in% SampleNames)) + expect_true(all(SampleNames %in% names(Sample_Select))) expect_is(Sample_Select$Date, 'Date') expect_is(Sample_Select$ConcAve, 'numeric') @@ -73,16 +73,15 @@ test_that("External INFO tests", { INFO <- readNWISInfo('05114000','00010',interactive=FALSE) expect_true(all(requiredColumns %in% names(INFO))) - # nameToUse <- 'Specific conductance' - # pcodeToUse <- '00095' - # - # INFO_WQP <- readWQPInfo('USGS-04024315',pcodeToUse,interactive=FALSE) - # expect_true(all(requiredColumns %in% names(INFO_WQP))) - # - # INFO2 <- readWQPInfo('WIDNR_WQX-10032762',nameToUse,interactive=FALSE) - # expect_true(all(requiredColumns %in% names(INFO2))) - # - # + nameToUse <- 'Specific conductance' + pcodeToUse <- '00095' + + INFO_WQP <- readWQPInfo('USGS-04024315',pcodeToUse,interactive=FALSE) + expect_true(all(requiredColumns %in% names(INFO_WQP))) + + INFO2 <- readWQPInfo('WIDNR_WQX-10032762',nameToUse,interactive=FALSE) + expect_true(all(requiredColumns %in% names(INFO2))) + }) test_that("User tests", { diff --git a/tests/testthat/tests_utils.R b/tests/testthat/tests_utils.R index 21ba0cae..02c8f3de 100644 --- a/tests/testthat/tests_utils.R +++ b/tests/testthat/tests_utils.R @@ -69,15 +69,15 @@ test_that("data functions work", { compressed <- compressData(dataInput) expect_is(compressed, "data.frame") expect_gt(nrow(compressed), 1) - expect_equal(names(compressed), c("dateTime", "ConcLow", "ConcHigh", - "Uncen")) + expect_true(all(c("dateTime", "ConcLow", "ConcHigh", "Uncen") %in% + names(compressed))) #mergeReport siteNumber <- '01594440' pCode <- '01075' Daily <- readNWISDaily(siteNumber,'00060', '1985-01-01', '1990-03-31') - expect_warning(Sample <- readNWISSample(siteNumber,pCode, '1985-01-01', '1990-03-31')) + Sample <- readNWISSample(siteNumber,pCode, '1985-01-01', '1990-03-31') INFO <- readNWISInfo(siteNumber,pCode,interactive=FALSE) eList <- mergeReport(INFO, Daily, Sample) expect_equal(names(eList), c("INFO", "Daily", "Sample", "surfaces")) From 8caa8a56a60ab5f9524b87f42d10a0962e7c1206 Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Sat, 26 Oct 2024 08:04:10 -0500 Subject: [PATCH 07/11] old version dataRetrieval wouldn't have this attribute --- R/readWQPSample.R | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/R/readWQPSample.R b/R/readWQPSample.R index 96054e47..ffdac5ce 100644 --- a/R/readWQPSample.R +++ b/R/readWQPSample.R @@ -87,8 +87,7 @@ readWQPSample <- function(siteNumber, data <- dataRetrieval::readWQPqw(siteNumbers = siteNumber, parameterCd = characteristicName, startDate = startDate, - endDate = endDate, - ignore_attributes = TRUE) + endDate = endDate) } if(nrow(data) == 0){ From 23b5f1897695add5d3881417bd55d5d4d6f40eda Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Sat, 26 Oct 2024 08:04:22 -0500 Subject: [PATCH 08/11] more info --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 0f061074..57e1e6b7 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,8 @@ EGRET 3.0.10 * Fix bug with 0 concentration values in readWQPSample. * Style updates. * Port readNWISSample to Water Quality Portal. NWIS services are retired. +* Move removing the rows of Sample data with 0 concentration to outside compressData +* Add columns from raw WQP data to be retained in Sample dataframe. EGRET 3.0.9 From 1a7e8eaece5e9b3e40ccb83ca1739b44d771dadb Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Sat, 26 Oct 2024 08:28:37 -0500 Subject: [PATCH 09/11] fix one more test --- .Rbuildignore | 3 ++- tests/testthat/tests_imports.R | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index b51a2f6b..bf15ba7f 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -62,4 +62,5 @@ deploy_simple.R cobertura.xml test-out.xml ^_pkgdown\.yml$ -review/* \ No newline at end of file +review/* +doc/* \ No newline at end of file diff --git a/tests/testthat/tests_imports.R b/tests/testthat/tests_imports.R index 11acf8c4..3ae55039 100644 --- a/tests/testthat/tests_imports.R +++ b/tests/testthat/tests_imports.R @@ -104,7 +104,7 @@ test_that("User tests", { SampleNames <- c("Date","ConcLow","ConcHigh","Uncen","ConcAve","Julian","Month", "Day","DecYear","MonthSeq","waterYear","SinDY","CosDY") - expect_true(all(names(Sample_user) %in% SampleNames)) + expect_true(all(SampleNames %in% names(Sample_user))) }) From 8b251655891928de7d5b84aad646a0bc1ef9cf20 Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Sat, 26 Oct 2024 11:21:39 -0500 Subject: [PATCH 10/11] Cleanup links, rebuild readme --- .Rbuildignore | 2 +- R/EGRET.R | 2 +- README.Rmd | 10 +- README.md | 170 +++++++++++------------ man/figures/README-plotFours-1.png | Bin 13690 -> 13727 bytes man/figures/README-plotFours-2.png | Bin 13647 -> 13662 bytes man/figures/README-unnamed-chunk-4-1.png | Bin 7608 -> 7637 bytes man/figures/README-unnamed-chunk-4-2.png | Bin 7920 -> 7982 bytes man/figures/README-unnamed-chunk-4-3.png | Bin 8572 -> 8588 bytes vignettes/Overview.Rmd | 12 +- 10 files changed, 92 insertions(+), 104 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index bf15ba7f..6b14c5ba 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -63,4 +63,4 @@ cobertura.xml test-out.xml ^_pkgdown\.yml$ review/* -doc/* \ No newline at end of file +docs/* \ No newline at end of file diff --git a/R/EGRET.R b/R/EGRET.R index d668d4d3..78cfe6f0 100644 --- a/R/EGRET.R +++ b/R/EGRET.R @@ -3,7 +3,7 @@ if (!interactive()) return() EGRET_version = utils::packageVersion("EGRET") packageStartupMessage("EGRET ", EGRET_version," -Extended Documentation: https://rconnect.usgs.gov/EGRET") +Extended Documentation: https://doi-usgs.github.io/EGRET") } diff --git a/README.Rmd b/README.Rmd index 61d8a744..f2c7fdaf 100644 --- a/README.Rmd +++ b/README.Rmd @@ -26,15 +26,15 @@ Exploration and Graphics for RivEr Trends (`EGRET`): An R-package for the analysis of long-term changes in water quality and streamflow, including the water-quality method Weighted Regressions on Time, Discharge, and Season (WRTDS). Look for new and improved documentation here: -[https://rconnect.usgs.gov/EGRET/](https://rconnect.usgs.gov/EGRET/) + The link for the official USGS publication user guide is here: [https://pubs.usgs.gov/tm/04/a10/](https://pubs.usgs.gov/tm/04/a10/) -A companion package [`EGRETci`](https://rconnect.usgs.gov/EGRETci/) implements a set of approaches to the analysis of uncertainty associated with WRTDS trend analysis. +A companion package [`EGRETci`](https://doi-usgs.github.io/EGRETci/) implements a set of approaches to the analysis of uncertainty associated with WRTDS trend analysis. -If you are familiar with the traditional `EGRET` workflow, check out the [Overview and Updates](https://rconnect.usgs.gov/EGRET/articles/Overview.html) to see how all the latest updates relate. +If you are familiar with the traditional `EGRET` workflow, check out the [Overview and Updates](https://doi-usgs.github.io/EGRET/articles/Overview.html to see how all the latest updates relate. Recent introduction to WRTDS and the `EGRET` package at the 12th National Monitoring Conference April 19, 2021: @@ -67,7 +67,7 @@ The second is an application to nitrate data for 8 monitoring sites on the Missi For a thorough discussion of the generalized flow normalization method implemented in the EGRET enhancements, see the paper: "Tracking changes in nutrient delivery to western Lake Erie: Approaches to compensate for variability and trends in streamflow": -(https://www.sciencedirect.com/science/article/pii/S0380133018302235). +. ## Sample Workflow @@ -251,7 +251,7 @@ citation(package = "EGRET") See this list for WRTDS applications in print: -[https://rconnect.usgs.gov/EGRET/articles/References_WRTDS.html](https://rconnect.usgs.gov/EGRET/articles/References_WRTDS.html) + ```{r disclaimer, child="DISCLAIMER.md", eval=TRUE} diff --git a/README.md b/README.md index 812dc26d..eb82235a 100644 --- a/README.md +++ b/README.md @@ -11,20 +11,21 @@ including the water-quality method Weighted Regressions on Time, Discharge, and Season (WRTDS). Look for new and improved documentation here: - +https://doi-usgs.github.io/EGRET/\ The link for the official USGS publication user guide is here: -A companion package [`EGRETci`](https://rconnect.usgs.gov/EGRETci/) +A companion package [`EGRETci`](https://doi-usgs.github.io/EGRETci/) implements a set of approaches to the analysis of uncertainty associated with WRTDS trend analysis. If you are familiar with the traditional `EGRET` workflow, check out the -[Overview and -Updates](https://rconnect.usgs.gov/EGRET/articles/Overview.html) to see -how all the latest updates relate. +\[Overview and +Updates\]( to +see how all the latest updates relate. Recent introduction to WRTDS and the `EGRET` package at the 12th National Monitoring Conference April 19, 2021: @@ -93,7 +94,7 @@ implemented in the EGRET enhancements, see the paper: “Tracking changes in nutrient delivery to western Lake Erie: Approaches to compensate for variability and trends in streamflow”: -(). +. ## Sample Workflow @@ -201,7 +202,7 @@ plotConcTimeDaily(eList) ``` r plotFluxTimeDaily(eList) -#> plotGenConc = TRUE requires running WRTDSKalman +#> plotGenFlux = TRUE requires running WRTDSKalman #> on eList. Switching to WRTDS concentration. ``` @@ -327,11 +328,13 @@ siteID <- "01491000" #Choptank River at Greensboro, MD startDate <- "" # Get earliest date endDate <- "" # Get latest date Daily <- readNWISDaily(siteID, "00060", startDate, endDate) -#> There are 27427 data points, and 27427 days. +#> GET: https://waterservices.usgs.gov/nwis/dv/?site=01491000&format=rdb,1.0&ParameterCd=00060&StatCd=00003&startDT=1851-01-01 +#> There are 28058 data points, and 28058 days. # Gather site and parameter information: # Here user must input some values for # the default (interactive=TRUE) INFO <- readNWISInfo(siteID, "00060") +#> GET: https://waterservices.usgs.gov/nwis/site/?siteOutput=Expanded&format=rdb&site=01491000 #> Your site for streamflow data is: #> 01491000 . #> Your site name is CHOPTANK RIVER NEAR GREENSBORO, MD @@ -411,85 +414,74 @@ environments. sessioninfo::session_info() #> ─ Session info ─────────────────────────────────────────────────────────────── #> setting value -#> version R version 4.2.2 (2022-10-31 ucrt) -#> os Windows 10 x64 (build 19044) +#> version R version 4.4.1 (2024-06-14 ucrt) +#> os Windows 11 x64 (build 22631) #> system x86_64, mingw32 #> ui RTerm #> language (EN) #> collate English_United States.utf8 #> ctype English_United States.utf8 #> tz America/Chicago -#> date 2023-02-03 -#> pandoc 2.19.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown) +#> date 2024-10-26 +#> pandoc 3.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown) #> #> ─ Packages ─────────────────────────────────────────────────────────────────── #> package * version date (UTC) lib source -#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.2.1) -#> bit 4.0.5 2022-11-15 [1] CRAN (R 4.2.2) -#> bit64 4.0.5 2020-08-30 [1] CRAN (R 4.2.2) -#> class 7.3-20 2022-01-16 [2] CRAN (R 4.2.2) -#> classInt 0.4-8 2022-09-29 [1] CRAN (R 4.2.1) -#> cli 3.6.0 2023-01-09 [1] CRAN (R 4.2.2) -#> colorspace 2.1-0 2023-01-23 [1] CRAN (R 4.2.2) -#> crayon 1.5.2 2022-09-29 [1] CRAN (R 4.2.1) -#> curl 5.0.0 2023-01-12 [1] CRAN (R 4.2.2) -#> dataRetrieval 2.7.12 2023-02-01 [1] local -#> DBI 1.1.3 2022-06-18 [1] CRAN (R 4.2.1) -#> digest 0.6.31 2022-12-11 [1] CRAN (R 4.2.2) -#> dotCall64 1.0-2 2022-10-03 [1] CRAN (R 4.2.1) -#> dplyr 1.0.10 2022-09-01 [1] CRAN (R 4.2.1) -#> e1071 1.7-12 2022-10-24 [1] CRAN (R 4.2.2) -#> EGRET * 3.0.8 2023-01-24 [1] local -#> ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.2.1) -#> evaluate 0.20 2023-01-17 [1] CRAN (R 4.2.2) -#> fansi 1.0.4 2023-01-22 [1] CRAN (R 4.2.2) -#> fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.2.1) -#> fields 14.1 2022-08-12 [1] CRAN (R 4.2.1) -#> generics 0.1.3 2022-07-05 [1] CRAN (R 4.2.1) -#> ggplot2 3.4.0 2022-11-04 [1] CRAN (R 4.2.2) -#> glue 1.6.2 2022-02-24 [1] CRAN (R 4.1.3) -#> gridExtra 2.3 2017-09-09 [1] CRAN (R 4.2.1) -#> gtable 0.3.1 2022-09-01 [1] CRAN (R 4.2.1) -#> highr 0.10 2022-12-22 [1] CRAN (R 4.2.2) -#> hms 1.1.2 2022-08-19 [1] CRAN (R 4.2.1) -#> htmltools 0.5.4 2022-12-07 [1] CRAN (R 4.2.2) -#> httr 1.4.4 2022-08-17 [1] CRAN (R 4.2.2) -#> KernSmooth 2.23-20 2021-05-03 [2] CRAN (R 4.2.2) -#> knitr 1.42 2023-01-25 [1] CRAN (R 4.2.2) -#> lattice 0.20-45 2021-09-22 [2] CRAN (R 4.2.2) -#> lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.2.1) -#> magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.1.3) -#> maps 3.4.1 2022-10-30 [1] CRAN (R 4.2.2) -#> Matrix 1.5-3 2022-11-11 [1] CRAN (R 4.2.2) -#> munsell 0.5.0 2018-06-12 [1] CRAN (R 4.2.1) -#> pillar 1.8.1 2022-08-19 [1] CRAN (R 4.2.1) -#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.2.1) -#> proxy 0.4-27 2022-06-09 [1] CRAN (R 4.2.1) -#> R6 2.5.1 2021-08-19 [1] CRAN (R 4.2.1) -#> Rcpp 1.0.10 2023-01-22 [1] CRAN (R 4.2.2) -#> readr 2.1.3 2022-10-01 [1] CRAN (R 4.2.1) -#> rlang 1.0.6 2022-09-24 [1] CRAN (R 4.2.1) -#> rmarkdown 2.20 2023-01-19 [1] CRAN (R 4.2.2) -#> rstudioapi 0.14 2022-08-22 [1] CRAN (R 4.2.1) -#> scales 1.2.1 2022-08-20 [1] CRAN (R 4.2.1) -#> sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.2.1) -#> sf 1.0-9 2022-11-08 [1] CRAN (R 4.2.2) -#> spam 2.9-1 2022-08-07 [1] CRAN (R 4.2.1) -#> survival 3.5-0 2023-01-09 [1] CRAN (R 4.2.2) -#> tibble 3.1.8 2022-07-22 [1] CRAN (R 4.2.1) -#> tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.2.1) -#> tzdb 0.3.0 2022-03-28 [1] CRAN (R 4.2.1) -#> units 0.8-1 2022-12-10 [1] CRAN (R 4.2.2) -#> utf8 1.2.2 2021-07-24 [1] CRAN (R 4.2.1) -#> vctrs 0.5.2 2023-01-23 [1] CRAN (R 4.2.2) -#> viridis 0.6.2 2021-10-13 [1] CRAN (R 4.2.1) -#> viridisLite 0.4.1 2022-08-22 [1] CRAN (R 4.2.1) -#> vroom 1.6.1 2023-01-22 [1] CRAN (R 4.2.2) -#> xfun 0.36 2022-12-21 [1] CRAN (R 4.2.2) -#> yaml 2.3.7 2023-01-23 [1] CRAN (R 4.2.2) +#> bit 4.5.0 2024-09-20 [1] CRAN (R 4.4.1) +#> bit64 4.5.2 2024-09-22 [1] CRAN (R 4.4.1) +#> class 7.3-22 2023-05-03 [2] CRAN (R 4.4.1) +#> classInt 0.4-10 2023-09-05 [1] CRAN (R 4.4.0) +#> cli 3.6.3 2024-06-21 [1] CRAN (R 4.4.1) +#> crayon 1.5.3 2024-06-20 [1] CRAN (R 4.4.1) +#> curl 5.2.3 2024-09-20 [1] CRAN (R 4.4.1) +#> dataRetrieval 2.7.17 2024-10-25 [1] local +#> DBI 1.2.3 2024-06-02 [1] CRAN (R 4.4.0) +#> digest 0.6.37 2024-08-19 [1] CRAN (R 4.4.1) +#> dotCall64 1.2 2024-10-04 [1] CRAN (R 4.4.1) +#> e1071 1.7-16 2024-09-16 [1] CRAN (R 4.4.1) +#> EGRET * 3.0.10 2024-10-26 [1] local +#> evaluate 1.0.1 2024-10-10 [1] CRAN (R 4.4.1) +#> fansi 1.0.6 2023-12-08 [1] CRAN (R 4.4.0) +#> fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.4.0) +#> fields 16.3 2024-09-30 [1] CRAN (R 4.4.1) +#> glue 1.8.0 2024-09-30 [1] CRAN (R 4.4.1) +#> highr 0.11 2024-05-26 [1] CRAN (R 4.4.0) +#> hms 1.1.3 2023-03-21 [1] CRAN (R 4.4.0) +#> htmltools 0.5.8.1 2024-04-04 [1] CRAN (R 4.4.0) +#> httr 1.4.7 2023-08-15 [1] CRAN (R 4.4.0) +#> KernSmooth 2.23-24 2024-05-17 [2] CRAN (R 4.4.1) +#> knitr 1.48 2024-07-07 [1] CRAN (R 4.4.1) +#> lattice 0.22-6 2024-03-20 [1] CRAN (R 4.4.0) +#> lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.4.0) +#> magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.4.0) +#> maps 3.4.2 2023-12-15 [1] CRAN (R 4.4.0) +#> Matrix 1.7-0 2024-04-26 [2] CRAN (R 4.4.1) +#> pillar 1.9.0 2023-03-22 [1] CRAN (R 4.4.0) +#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.4.0) +#> proxy 0.4-27 2022-06-09 [1] CRAN (R 4.4.0) +#> R6 2.5.1 2021-08-19 [1] CRAN (R 4.4.0) +#> Rcpp 1.0.13 2024-07-17 [1] CRAN (R 4.4.1) +#> readr 2.1.5 2024-01-10 [1] CRAN (R 4.4.0) +#> rlang 1.1.4 2024-06-04 [1] CRAN (R 4.4.1) +#> rmarkdown 2.28 2024-08-17 [1] CRAN (R 4.4.1) +#> rstudioapi 0.17.1 2024-10-22 [1] CRAN (R 4.4.1) +#> sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.4.0) +#> sf 1.0-18 2024-10-11 [1] CRAN (R 4.4.1) +#> spam 2.11-0 2024-10-03 [1] CRAN (R 4.4.1) +#> survival 3.6-4 2024-04-24 [2] CRAN (R 4.4.1) +#> tibble 3.2.1 2023-03-20 [1] CRAN (R 4.4.0) +#> tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.4.0) +#> tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.4.0) +#> units 0.8-5 2023-11-28 [1] CRAN (R 4.4.0) +#> utf8 1.2.4 2023-10-22 [1] CRAN (R 4.4.0) +#> vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.4.0) +#> viridisLite 0.4.2 2023-05-02 [1] CRAN (R 4.4.0) +#> vroom 1.6.5 2023-12-05 [1] CRAN (R 4.4.0) +#> xfun 0.48 2024-10-03 [1] CRAN (R 4.4.1) +#> yaml 2.3.10 2024-07-26 [1] CRAN (R 4.4.1) #> -#> [1] C:/Users/ldecicco/Documents/R/win-library/4.2 -#> [2] C:/Program Files/R/R-4.2.2/library +#> [1] C:/Users/ldecicco/AppData/Local/R/win-library/4.4 +#> [2] C:/Program Files/R/R-4.4.1/library #> #> ────────────────────────────────────────────────────────────────────────────── ``` @@ -533,25 +525,19 @@ date. ``` r citation(package = "EGRET") -#> #> To cite EGRET in publications, please use: #> -#> Hirsch, R.M., and De Cicco, L.A., 2015, User guide to Exploration and -#> Graphics for RivEr Trends (EGRET) and dataRetrieval: R packages for -#> hydrologic data (version 2.0, February 2015): U.S. Geological Survey -#> Techniques and Methods book 4, chap. A10, 93 p., doi:10.3133/tm4A10 +#> Hirsch, R.M., De Cicco, L.A., Murphy, J., 2024, Exploration and +#> Graphics for RivEr Trends (EGRET), version 3.0.10, +#> doi:10.5066/P9CC9JEX #> #> A BibTeX entry for LaTeX users is #> -#> @InBook{, -#> author = {Robert M. Hirsch and Laura A. {De Cicco}}, -#> title = {User guide to Exploration and Graphics for RivEr Trends (EGRET) and dataRetrieval: R packages for hydrologic data}, +#> @Manual{, +#> author = {Robert Hirsch and Laura DeCicco and Jennifer Murphy}, +#> title = {Exploration and Graphics for RivEr Trends (EGRET)}, #> publisher = {U.S. Geological Survey}, -#> address = {Reston, VA}, -#> booktitle = {Techniques and Methods}, -#> institution = {U.S. Geological Survey}, -#> year = {2015}, -#> chapter = {A10}, +#> year = {2024}, #> url = {https://pubs.usgs.gov/tm/04/a10/}, #> } ``` @@ -560,7 +546,9 @@ citation(package = "EGRET") See this list for WRTDS applications in print: - +https://doi-usgs.github.io/EGRET/articles/References_WRTDS.html\ # Disclaimer diff --git a/man/figures/README-plotFours-1.png b/man/figures/README-plotFours-1.png index 65034630fd360700b660a8d7ead9cbf7e665ae14..3ba30e3fe239af007e988a0a5ded9b362fd74141 100644 GIT binary patch delta 11813 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 delta 11831 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 Pf&Mhr^i*q=?W6w>wfo;! diff --git a/man/figures/README-plotFours-2.png b/man/figures/README-plotFours-2.png index f7af2e611dc2c72d54993a082a36911440044de8..dfbc47b53c7aba6284cc8f7dc9a2f4024294c1bb 100644 GIT binary patch delta 8688 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 Hu0mjfXhybu delta 2411 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 diff --git a/man/figures/README-unnamed-chunk-4-2.png b/man/figures/README-unnamed-chunk-4-2.png index a0d7466e34a784b4fecb915cc68b470354268117..f5d4afc244ca056e567a34399795bc5f57029cd6 100644 GIT binary patch delta 7142 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 P5q|2AbyO>rtt0*ifNs?C delta 7033 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

0^&RS>-E&KgQSnVr$h@RLc9=7j;dz%QovK zkUH6QhMcqT&#{i20zDx?1UxH`K9cW^nX*oSLFT?*f&OmiE;r&puDdB^Oy$g)fx;f9 zO9ppGaP|j1b@j7lofb$q=1v_763;m!KzCLd5L6}ugKe71SB)gF3<_2Md%|Bwl_`X9 z+krxS(<2!nEBy4#mYBSRxw7(VN$Aah{_sio81J8zL5Y=J(U~IW%!B(E9!zRzUY(KQ zWKmBE+vRG2N#krR)kKb$-^pV+7lHWi~ZNKEslOKNkp@YVp+*y^IX4X;R)|Q z{EJj-g_lAQH@v;75~wuM_H6ncL&Z$^IhhJpet56yN6#gWCPaO~dR#Y`QIvX}**vF( z8R|n=RZb@+7iEK$vMr2LN2Whs@Ojx5J49sgC$$*Kn}rDQcjL8hT20=v`oL}fK?gIZ zX;eaRk#tr)lbFw``gn-AyzOOBucpV&*|C$#$!N@$fv2obM^{PNC3TR$Rx-NJCw|`9 zM(5qn_qL~P(t;fFFqi(Onf?;b&pOYfX#bP9^a;(h$p3k1>8~lt;(#iwcVujd2#=PU Lo@$lyv#9?8CBTBB diff --git a/man/figures/README-unnamed-chunk-4-3.png b/man/figures/README-unnamed-chunk-4-3.png index c676586a1b6d338b9da4cc4c409df70214477baa..0189d0c197be70e34bfe56fa245dd2a44d37449b 100644 GIT binary patch delta 7280 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 diff --git a/vignettes/Overview.Rmd b/vignettes/Overview.Rmd index 22c2a6fd..3a51ea9c 100644 --- a/vignettes/Overview.Rmd +++ b/vignettes/Overview.Rmd @@ -18,7 +18,7 @@ Evaluating long-term changes in river conditions (water quality and discharge) i However, several major enhancements and extensions of the method have been made since the User Guide was published in 2015. This EGRET Update Overview is designed to help a user decide which of EGRET’s capabilities they want to apply, and then point them to the relevant documents that describe those in detail. These include various journal articles that explain motivations for these enhancements, provide the mathematical formulations for them, and show examples of their application. It also includes references to various supporting vignettes that explain how to apply these enhancements to the EGRET package. There are also several special applications for which R scripts have been written that depend on the EGRET package, this EGRET Overview and Update will describe them and point to those scripts. -There is an additional R package that users of EGRET should be aware of, called **EGRETci** (which stands for confidence intervals). The EGRETci package is designed to provide a variety of approaches to uncertainty analysis related to the water quality trend results computed in EGRET. EGRETci is tightly linked to EGRET, such that output dataframes or other objects produced by EGRET serve as inputs to functions in EGRETci. Throughout this EGRET Update and Overview we will make mention of the relevant functions of EGRETci. There is a home page for [EGRETci](https://rconnect.usgs.gov/EGRETci/). At the end of this document there is a brief description in the recent changes that have been made to EGRETci. +There is an additional R package that users of EGRET should be aware of, called **EGRETci** (which stands for confidence intervals). The EGRETci package is designed to provide a variety of approaches to uncertainty analysis related to the water quality trend results computed in EGRET. EGRETci is tightly linked to EGRET, such that output dataframes or other objects produced by EGRET serve as inputs to functions in EGRETci. Throughout this EGRET Update and Overview we will make mention of the relevant functions of EGRETci. There is a home page for [EGRETci](https://doi-usgs.github.io/EGRETci/). At the end of this document there is a brief description in the recent changes that have been made to EGRETci. # General Introduction to the EGRET package @@ -38,9 +38,9 @@ These topics are covered extensively both in the [Introduction to the EGRET pack # 2. Exploration of trends in discharge -EGRET has many tabular and graphical approaches to exploring trends in discharge. These are described in the Flow History component (pages 15 - 28) of the [EGRET User Guide](https://pubs.usgs.gov/tm/04/a10/pdf/tm4A10.pdf)(pages 15 – 28) and section 5 of [Introduction to the EGRET package](https://rconnect.usgs.gov/EGRET/). +EGRET has many tabular and graphical approaches to exploring trends in discharge. These are described in the Flow History component (pages 15 - 28) of the [EGRET User Guide](https://pubs.usgs.gov/tm/04/a10/pdf/tm4A10.pdf)(pages 15 – 28) and section 5 of [Introduction to the EGRET package](https://doi-usgs.github.io/EGRET/articles/EGRET.html). -In addition, a script is available with some new capabilities. It is called [Daily Streamflow Trend Analysis](https://rconnect.usgs.gov/EGRET/articles/streamflow_trend.html). This script includes the graphical technique for exploring trends across the entire frequency distribution: "The Quantile Kendall Plot". This technique is described in [Choquette et al., 2019](https://doi.org/10.1016/j.jglr.2018.11.012). One new function, called [cumQdate( )](https://rconnect.usgs.gov/EGRET/reference/cumQdate.html) has been added to the EGRET package, it is designed to describe trends in the timing of annual runoff. Examples of its application are in [Annual Hydrograph Timing](https://rconnect.usgs.gov/EGRET/articles/Annual_Hydrograph_Timing.html). +In addition, a script is available with some new capabilities. It is called [Daily Streamflow Trend Analysis](https://doi-usgs.github.io/EGRET/articles/streamflow_trend.html). This script includes the graphical technique for exploring trends across the entire frequency distribution: "The Quantile Kendall Plot". This technique is described in [Choquette et al., 2019](https://doi.org/10.1016/j.jglr.2018.11.012). One new function, called [cumQdate( )](https://rconnect.usgs.gov/EGRET/reference/cumQdate.html) has been added to the EGRET package, it is designed to describe trends in the timing of annual runoff. Examples of its application are in [Annual Hydrograph Timing](https://rconnect.usgs.gov/EGRET/articles/Annual_Hydrograph_Timing.html). # 3. Describing water quality without using the WRTDS model. @@ -58,7 +58,7 @@ Having said that, we should recognize that the purpose of many of these graphs o # 4. Making the best possible estimates of concentration or flux for some specific day, month, or year. -Although the primary purpose for the development of the WRTDS method and EGRET software was to evaluate long term trends, they can also be used for this different purpose: creating the best possible estimate of conditions for any specific day, month, season, or year. For trend analysis (which is discussed in item 5 below) our objective is to remove the confounding influence of the year-to-year variations in discharge in order to see more clearly the underlying trend in water quality. The results from the WRTDS method that are used for the trend analysis purpose are the "Flow-Normalized" values. But here we are considering a different kind of purpose. Here, the question we are focused on is something like: "What’s our best estimate of the flux of total phosphorus into the lake during the month of May 2020?" or "What’s our best estimate of the chloride concentration on February 2, 2019?" For these kinds of estimates we can use a new method called "WRTDS Kalman" or [WRTDS_K](https://rconnect.usgs.gov/EGRET/articles/WRTDSK.html). In addition there are two publications that describe the concept and the mathematics. [Lee, Hirsch and Crawford, 2019](https://pubs.er.usgs.gov/publication/sir20195084) and [Zhang and Hirsch, 2019](https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2019WR025338). +Although the primary purpose for the development of the WRTDS method and EGRET software was to evaluate long term trends, they can also be used for this different purpose: creating the best possible estimate of conditions for any specific day, month, season, or year. For trend analysis (which is discussed in item 5 below) our objective is to remove the confounding influence of the year-to-year variations in discharge in order to see more clearly the underlying trend in water quality. The results from the WRTDS method that are used for the trend analysis purpose are the "Flow-Normalized" values. But here we are considering a different kind of purpose. Here, the question we are focused on is something like: "What’s our best estimate of the flux of total phosphorus into the lake during the month of May 2020?" or "What’s our best estimate of the chloride concentration on February 2, 2019?" For these kinds of estimates we can use a new method called "WRTDS Kalman" or [WRTDS_K](https://doi-usgs.github.io/EGRET/articles/WRTDSK.html). In addition there are two publications that describe the concept and the mathematics. [Lee, Hirsch and Crawford, 2019](https://pubs.er.usgs.gov/publication/sir20195084) and [Zhang and Hirsch, 2019](https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2019WR025338). WRTDS_K is based on this simple idea. On any given sampled day, the measured concentration will almost certainly differ from the value that WRTDS would predict. The measured value is always a better value to use for that day than is the WRTDS estimate for that day. Furthermore, days surrounding the day of measurement are likely to have values not too different from the sampled day. For any given day, the WRTDS_K method uses a mixture of the WRTDS model’s estimated value and the measured value on the nearest sampled day prior and nearest sampled day after the given day to create an optimal estimate for that day. The mathematics of the method uses an auto-regressive, lag-one day, stochastic model to make these estimates of concentration (and hence flux) for each day in the record. @@ -79,11 +79,11 @@ There has been some new functionality added for trend analysis added to EGRET th #### 5ai. runPairs( ) -[runPairs( )](https://rconnect.usgs.gov/EGRET/reference/runPairs.html) is designed to address the specific question of how much has the flow-normalized concentration or flow-normalized flux changed from some selected starting year to some selected ending year. The exact same information can be gleaned from [modelEstimation( )](https://rconnect.usgs.gov/EGRET/reference/modelEstimation.html) and then [tableChange( )](https://rconnect.usgs.gov/EGRET/reference/tableChange.html). The advantage of runPairs( ) is that the analysis can take significantly less computer time, because it is not attempting to statistically model all the years between the starting and ending year. The output of runPairs( ) can then be used as input to [runPairsBoot( )](https://rconnect.usgs.gov/EGRETci/reference/runPairsBoot.html) in the EGRETci package to evaluate the uncertainty of the trend. +`runPairs` is designed to address the specific question of how much has the flow-normalized concentration or flow-normalized flux changed from some selected starting year to some selected ending year. The exact same information can be gleaned from `modelEstimation` and then `tableChange`. The advantage of `runPairs` is that the analysis can take significantly less computer time, because it is not attempting to statistically model all the years between the starting and ending year. The output of `runPairs` can then be used as input to [runPairsBoot( )](https://doi-usgs.github.io/EGRETci/reference/runPairsBoot.html) in the EGRETci package to evaluate the uncertainty of the trend. #### 5aii. runGroups( ) -The concept in group analysis is that we wish to compare not just two different years as we did in runPairs( ) but rather, to compare one group of years to another group of years. For example, there may be a strategy for nutrient reduction that calls for decreases in average concentrations, or average fluxes, for some period after the strategy went into effect compared to the time before it went into effect. Or perhaps we want to evaluate the consequences of a large investment in pollution control that went into effect fairly abruptly at some point in time and we want to do a "before and after" analysis. The evaluations of trends for these kinds of analyses can’t be gleaned from modelEstimation( ) or runPairs( ). See [runGroups( )](https://rconnect.usgs.gov/EGRET/reference/runGroups.html) for details about the function. Also, the outputs of runGroups( ) can be used as input to [runGroupsBoot( )](https://rconnect.usgs.gov/EGRETci/reference/runGroupsBoot.html) in the EGRETci package to evaluate the uncertainty of the trend. +The concept in group analysis is that we wish to compare not just two different years as we did in `runPairs` but rather, to compare one group of years to another group of years. For example, there may be a strategy for nutrient reduction that calls for decreases in average concentrations, or average fluxes, for some period after the strategy went into effect compared to the time before it went into effect. Or perhaps we want to evaluate the consequences of a large investment in pollution control that went into effect fairly abruptly at some point in time and we want to do a "before and after" analysis. The evaluations of trends for these kinds of analyses can’t be gleaned from `modelEstimation` or `runPairs`. See `runGroups` for details about the function. Also, the outputs of runGroups( ) can be used as input to [runGroupsBoot( )](https://doi-usgs.github.io/EGRETci/reference/runGroupsBoot.html) in the EGRETci package to evaluate the uncertainty of the trend. #### 5aiii. runSeries( ) From 8f617d678f4b5856764de6826535839c19f13584 Mon Sep 17 00:00:00 2001 From: Laura A DeCicco Date: Sat, 26 Oct 2024 11:43:48 -0500 Subject: [PATCH 11/11] fix more links --- tests/testthat/Rplots.pdf | Bin 4367 -> 4367 bytes vignettes/Overview.Rmd | 56 +++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/tests/testthat/Rplots.pdf b/tests/testthat/Rplots.pdf index 44e21285d3e54a82287d2f64e165a52c0035ceb7..c0c5ad36749aa08a1c793a952008f8f4a095efd2 100644 GIT binary patch delta 55 zcmeBI>Q|azqHbbnU}R=!Xk=z;q{*f4o1fy6Sdyxs;bLWEV1y($FQ|azqHb(pW@KS#W@Kq