From 98a706373107188496a1df295697e739e51d6b06 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Thu, 4 Feb 2016 17:45:02 +0100 Subject: Improve reading spead for new TOXSWA format --- pkg/DESCRIPTION | 3 ++- pkg/NAMESPACE | 2 ++ pkg/R/TOXSWA_cwa.R | 26 +++++++++++++++----------- pkg/inst/testdata/SwashProjects.zip | Bin 5032617 -> 7989179 bytes pkg/man/PEC_sw_drift.Rd | 2 +- pkg/man/PEC_sw_sed.Rd | 2 +- pkg/man/read.TOXSWA_cwa.Rd | 9 +++++++-- 7 files changed, 28 insertions(+), 16 deletions(-) (limited to 'pkg') diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 1cc6817..ab3e92a 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -13,7 +13,8 @@ Depends: mkin Imports: graphics, - chents + chents, + readr Suggests: testthat License: GPL diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 0632e51..c59559b 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -24,3 +24,5 @@ import(chents) import(graphics) import(mkin) importFrom(R6,R6Class) +importFrom(readr,fwf_empty) +importFrom(readr,read_fwf) diff --git a/pkg/R/TOXSWA_cwa.R b/pkg/R/TOXSWA_cwa.R index 46b1995..a693dc1 100644 --- a/pkg/R/TOXSWA_cwa.R +++ b/pkg/R/TOXSWA_cwa.R @@ -34,6 +34,7 @@ #' maximum time weighted average concentrations and areas under the curve. #' @param thresholds Numeric vector of threshold concentrations in µg/L for #' generating event statistics. +#' @importFrom readr read_fwf fwf_empty #' @return An instance of an R6 object of class #' \code{\link{TOXSWA_cwa}}. #' @export @@ -174,17 +175,18 @@ TOXSWA_cwa <- R6Class("TOXSWA_cwa", } else { try(file_connection <- file(file.path(basedir, filename), "rt")) } + if (grepl(".cwa$", filename)) { # cwa file from FOCUS TOXSWA 3 (TOXSWA 2.x.y) - cwa_all_segments <- try(read.table(file_connection, - sep = "", skip = 40, - encoding = "UTF-8", - colClasses = c("character", "numeric", - "integer", rep("numeric", 5)), - col.names = c("datetime", "t", "segment", - "xcd", "cwa_tot", "cwa", - "Xss", "Xmp"))) + cwa_all_segments <- try( + read.table(file_connection, + sep = "", skip = 40, + encoding = "UTF-8", + colClasses = c("character", "numeric", + "integer", rep("numeric", 5)), + col.names = c("datetime", "t", "segment", + "xcd", "cwa_tot", "cwa", "Xss", "Xmp"))) if (is.null(zipfile)) close(file_connection) # only needed for files if (!inherits(cwa_all_segments, "try-error")) { @@ -225,15 +227,17 @@ TOXSWA_cwa <- R6Class("TOXSWA_cwa", stop("Could not read ", filename) } else { cwa_lines <- outfile[grep("ConLiqWatLay_", outfile)] # hourly concentrations - cwa_all_segments <- read.table(text = cwa_lines) + + cwa_all_segments <- read_fwf(paste(cwa_lines, collapse = "\n"), + fwf_empty(paste(tail(cwa_lines), collapse = "\n"))) available_segments = 1:(ncol(cwa_all_segments) - 3) if (segment == "last") segment = max(available_segments) if (!segment %in% available_segments) stop("Invalid segment specified") self$segment <- segment cwa <- data.frame( - datetime = as.character(cwa_all_segments$V2), - t = cwa_all_segments$V1, + datetime = as.character(cwa_all_segments$X2), + t = cwa_all_segments$X1, cwa = cwa_all_segments[[3 + segment]] ) if (total) { diff --git a/pkg/inst/testdata/SwashProjects.zip b/pkg/inst/testdata/SwashProjects.zip index 49507c9..5b9ff49 100644 Binary files a/pkg/inst/testdata/SwashProjects.zip and b/pkg/inst/testdata/SwashProjects.zip differ diff --git a/pkg/man/PEC_sw_drift.Rd b/pkg/man/PEC_sw_drift.Rd index c486831..6a1b935 100644 --- a/pkg/man/PEC_sw_drift.Rd +++ b/pkg/man/PEC_sw_drift.Rd @@ -6,7 +6,7 @@ \usage{ PEC_sw_drift(rate, applications = 1, water_depth = 30, drift_data = "JKI", crop = "Ackerbau", distances = c(1, 5, 10, 20), rate_units = "g/ha", - PEC_units = "µg/L") + PEC_units = "g/L") } \arguments{ \item{rate}{Application rate in units specified below} diff --git a/pkg/man/PEC_sw_sed.Rd b/pkg/man/PEC_sw_sed.Rd index 3140eb0..d0e2ec6 100644 --- a/pkg/man/PEC_sw_sed.Rd +++ b/pkg/man/PEC_sw_sed.Rd @@ -7,7 +7,7 @@ water concentrations} \usage{ PEC_sw_sed(PEC_sw, percentage = 100, method = "percentage", sediment_depth = 5, water_depth = 30, sediment_density = 1.3, - PEC_sed_units = c("µg/kg", "mg/kg")) + PEC_sed_units = c("g/kg", "mg/kg")) } \arguments{ \item{PEC_sw}{Numeric vector or matrix of surface water concentrations in µg/L for diff --git a/pkg/man/read.TOXSWA_cwa.Rd b/pkg/man/read.TOXSWA_cwa.Rd index acc384c..44a7542 100644 --- a/pkg/man/read.TOXSWA_cwa.Rd +++ b/pkg/man/read.TOXSWA_cwa.Rd @@ -5,10 +5,11 @@ \title{Read TOXSWA surface water concentrations} \usage{ read.TOXSWA_cwa(filename, basedir = ".", zipfile = NULL, segment = "last", - windows = NULL, thresholds = NULL) + total = FALSE, windows = NULL, thresholds = NULL) } \arguments{ -\item{filename}{The filename of the cwa file.} +\item{filename}{The filename of the cwa file (TOXSWA 2.x.y or similar) or the +out file (FOCUS TOXSWA 4, i.e. TOXSWA 4.4.2 or similar).} \item{basedir}{The path to the directory where the cwa file resides.} @@ -17,6 +18,10 @@ read.TOXSWA_cwa(filename, basedir = ".", zipfile = NULL, segment = "last", \item{segment}{The segment for which the data should be read. Either "last", or the segment number.} +\item{total}{Set this to TRUE in order to read total concentrations as well. This is +only necessary for .out files as generated by TOXSWA 4.4.2 or similar, not for .cwa +files. For .cwa files, the total concentration is always read as well.} + \item{windows}{Numeric vector of width of moving windows in days, for calculating maximum time weighted average concentrations and areas under the curve.} -- cgit v1.2.1