Skip to content

isoWater

Discovery, Retrieval, and Analysis of Water Isotope Data

v1.2.1 · Jul 1, 2025 · GPL-3

Description

The wiDB...() functions provide an interface to the public API of the wiDB <https://github.com/SPATIAL-Lab/isoWater/blob/master/Protocol.md>: build, check and submit queries, and receive and unpack responses. Data analysis functions support Bayesian inference of the source and source isotope composition of water samples that may have experienced evaporation. Algorithms adapted from Bowen et al. (2018, <doi:10.1007/s00442-018-4192-5>).

Downloads

279

Last 30 days

11088th

279

Last 90 days

279

Last year

CRAN Check Status

1 ERROR
13 OK
Show all 14 flavors
Flavor Status
r-devel-linux-x86_64-debian-clang OK
r-devel-linux-x86_64-debian-gcc OK
r-devel-linux-x86_64-fedora-clang OK
r-devel-linux-x86_64-fedora-gcc OK
r-devel-macos-arm64 ERROR
r-devel-windows-x86_64 OK
r-oldrel-macos-arm64 OK
r-oldrel-macos-x86_64 OK
r-oldrel-windows-x86_64 OK
r-patched-linux-x86_64 OK
r-release-linux-x86_64 OK
r-release-macos-arm64 OK
r-release-macos-x86_64 OK
r-release-windows-x86_64 OK
Check details (14 non-OK)
OK r-devel-linux-x86_64-debian-clang

*


            
OK r-devel-linux-x86_64-debian-gcc

*


            
OK r-devel-linux-x86_64-fedora-clang

*


            
OK r-devel-linux-x86_64-fedora-gcc

*


            
ERROR r-devel-macos-arm64

re-building of vignette outputs

Error(s) in re-building vignettes:
--- re-building ‘isoWater.Rmd’ using rmarkdown

 *** caught segfault ***
address 0x110, cause 'invalid permissions'

Traceback:
 1: ar.yw.default(x, aic = aic, order.max = order.max, na.action = na.action,     series = series, ...)
 2: ar.yw(x, aic = aic, order.max = order.max, na.action = na.action,     series = series, ...)
 3: ar(x[, i], aic = TRUE)
 4: spectrum0.ar(x)
 5: doTryCatch(return(expr), name, parentenv, handler)
 6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
 7: tryCatchList(expr, classes, parentenv, handlers)
 8: tryCatch(expr, error = function(e) {    call <- conditionCall(e)    if (!is.null(call)) {        if (identical(call[[1L]], quote(doTryCatch)))             call <- sys.call(-4L)        dcall <- deparse(call, nlines = 1L)        prefix <- paste("Error in", dcall, ": ")        LONG <- 75L        sm <- strsplit(conditionMessage(e), "\n")[[1L]]        w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w")        if (is.na(w))             w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L],                 type = "b")        if (w > LONG)             prefix <- paste0(prefix, "\n  ")    }    else prefix <- "Error : "    msg <- paste0(prefix, conditionMessage(e), "\n")    .Internal(seterrmessage(msg[1L]))    if (!silent && isTRUE(getOption("show.error.messages"))) {        cat(msg, file = outFile)        .Internal(printDeferredWarnings())    }    invisible(structure(msg, class = "try-error", condition = e))})
 9: try(spectrum0.ar(x)$spec)
10: safespec0(x[[i]][, j])
11: summary.mcmc.list(x)
12: summary(x)
13: mcmc2bugs(samples, model.file = model.file, program = "jags",     DIC = DIC, DICOutput = NULL, n.iter = n.iter, n.burnin = n.burnin,     n.thin = n.thin, checkMissing = checkMissing)
14: jags(data = data, parameters.to.save = parameters.to.save, model.file = model.file,     n.chains = 1, n.iter = n.iter, n.burnin = n.burnin, n.thin = n.thin)
15: eval(c.expr, envir = args, enclos = envir)
16: eval(c.expr, envir = args, enclos = envir)
17: doTryCatch(return(expr), name, parentenv, handler)
18: tryCatchOne(expr, names, parentenv, handlers[[1L]])
19: tryCatchList(expr, classes, parentenv, handlers)
20: tryCatch(eval(c.expr, envir = args, enclos = envir), error = function(e) e)
21: FUN(X[[i]], ...)
22: lapply(X = S, FUN = FUN, ...)
23: doTryCatch(return(expr), name, parentenv, handler)
24: tryCatchOne(expr, names, parentenv, handlers[[1L]])
25: tryCatchList(expr, classes, parentenv, handlers)
26: tryCatch(expr, error = function(e) {    call <- conditionCall(e)    if (!is.null(call)) {        if (identical(call[[1L]], quote(doTryCatch)))             call <- sys.call(-4L)        dcall <- deparse(call, nlines = 1L)        prefix <- paste("Error in", dcall, ": ")        LONG <- 75L        sm <- strsplit(conditionMessage(e), "\n")[[1L]]        w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w")        if (is.na(w))             w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L],                 type = "b")        if (w > LONG)             prefix <- paste0(prefix, "\n  ")    }    else prefix <- "Error : "    msg <- paste0(prefix, conditionMessage(e), "\n")    .Internal(seterrmessage(msg[1L]))    if (!silent && isTRUE(getOption("show.error.messages"))) {        cat(msg, file = outFile)        .Internal(printDeferredWarnings())    }    invisible(structure(msg, class = "try-error", condition = e))})
27: try(lapply(X = S, FUN = FUN, ...), silent = TRUE)
28: sendMaster(try(lapply(X = S, FUN = FUN, ...), silent = TRUE))
29: FUN(X[[i]], ...)
30: lapply(seq_len(cores), inner.do)
31: mclapply(argsList, FUN, mc.preschedule = preschedule, mc.set.seed = set.seed,     mc.silent = silent, mc.cores = cores)
32: e$fun(obj, substitute(ex), parent.frame(), e$data)
33: foreach(i = 1:n.cluster) %dopar% {    jags(data = data, parameters.to.save = parameters.to.save,         model.file = model.file, n.chains = 1, n.iter = n.iter,         n.burnin = n.burnin, n.thin = n.thin)}
34: jags.parallel(data = d, parameters.to.save = p, model.file = tmf,     n.iter = n.iter, n.chains = ncores, n.burnin = n.burnin,     n.thin = n.thin)
35: mixSource(obs, sources, slope, ngens = 20000, ncores = 2)
36: eval(expr, envir)
37: eval(expr, envir)
38: withVisible(eval(expr, envir))
39: withCallingHandlers(code, error = function (e) rlang::entrace(e), message = function (cnd) {    watcher$capture_plot_and_output()    if (on_message$capture) {        watcher$push(cnd)    }    if (on_message$silence) {        invokeRestart("muffleMessage")    }}, warning = function (cnd) {    if (getOption("warn") >= 2 || getOption("warn") < 0) {        return()    }    watcher$capture_plot_and_output()    if (on_warning$capture) {        cnd <- sanitize_call(cnd)        watcher$push(cnd)    }    if (on_warning$silence) {        invokeRestart("muffleWarning")    }}, error = function (cnd) {    watcher$capture_plot_and_output()    cnd <- sanitize_call(cnd)    watcher$push(cnd)    switch(on_error, continue = invokeRestart("eval_continue"),         stop = invokeRestart("eval_stop"), error = NULL)})
40: eval(call)
41: eval(call)
42: with_handlers({    for (expr in tle$exprs) {        ev <- withVisible(eval(expr, envir))        watcher$capture_plot_and_output()        watcher$print_value(ev$value, ev$visible, envir)    }    TRUE}, handlers)
43: doWithOneRestart(return(expr), restart)
44: withOneRestart(expr, restarts[[1L]])
45: withRestartList(expr, restarts[-nr])
46: doWithOneRestart(return(expr), restart)
47: withOneRestart(withRestartList(expr, restarts[-nr]), restarts[[nr]])
48: withRestartList(expr, restarts)
49: withRestarts(with_handlers({    for (expr in tle$exprs) {        ev <- withVisible(eval(expr, envir))        watcher$capture_plot_and_output()        watcher$print_value(ev$value, ev$visible, envir)    }    TRUE}, handlers), eval_continue = function() TRUE, eval_stop = function() FALSE)
50: evaluate::evaluate(...)
51: evaluate(code, envir = env, new_device = FALSE, keep_warning = if (is.numeric(options$warning)) TRUE else options$warning,     keep_message = if (is.numeric(options$message)) TRUE else options$message,     stop_on_error = if (is.numeric(options$error)) options$error else {        if (options$error && options$include)             0L        else 2L    }, output_handler = knit_handlers(options$render, options))
52: in_dir(input_dir(), expr)
53: in_input_dir(evaluate(code, envir = env, new_device = FALSE,     keep_warning = if (is.numeric(options$warning)) TRUE else options$warning,     keep_message = if (is.numeric(options$message)) TRUE else options$message,     stop_on_error = if (is.numeric(options$error)) options$error else {        if (options$error && options$include)             0L        else 2L    }, output_handler = knit_handlers(options$render, options)))
54: eng_r(options)
55: block_exec(params)
56: call_block(x)
57: process_group(group)
58: withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    })
59: with_options(withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    }), list(rlang_trace_top_env = knit_global()))
60: xfun:::handle_error(with_options(withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    }), list(rlang_trace_top_env = knit_global())), function(loc) {    setwd(wd)    write_utf8(res, output %n% stdout())    paste0("\nQuitting from ", loc, if (!is.null(error))         paste0("\n", rule(), error, "\n", rule()))}, if (labels[i] != "") sprintf(" [%s]", labels[i]), get_loc)
61: process_file(text, output)
62: knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
63: rmarkdown::render(file, encoding = encoding, quiet = quiet, envir = globalenv(),     output_dir = getwd(), ...)
64: vweave_rmarkdown(...)
65: engine$weave(file, quiet = quiet, encoding = enc)
66: doTryCatch(return(expr), name, parentenv, handler)
67: tryCatchOne(expr, names, parentenv, handlers[[1L]])
68: tryCatchList(expr, classes, parentenv, handlers)
69: tryCatch({    engine$weave(file, quiet = quiet, encoding = enc)    setwd(startdir)    output <- find_vignette_product(name, by = "weave", engine = engine)    if (!have.makefile && vignette_is_tex(output)) {        texi2pdf(file = output, clean = FALSE, quiet = quiet)        output <- find_vignette_product(name, by = "texi2pdf",             engine = engine)    }    outputs <- c(outputs, output)}, error = function(e) {    thisOK <<- FALSE    fails <<- c(fails, file)    message(gettextf("Error: processing vignette '%s' failed with diagnostics:\n%s",         file, conditionMessage(e)))})
70: tools::buildVignettes(dir = "/Volumes/Builds/packages/sonoma-arm64/results/4.6/isoWater.Rcheck/vign_test/isoWater",     skip = TRUE, ser_elibs = "/Volumes/Temp/tmp/Rtmp4yY2Yr/file1314c30a4fc2b.rds")
An irrecoverable exception occurred. R is aborting now ...

 *** caught segfault ***
address 0x110, cause 'invalid permissions'

Traceback:
 1: ar.yw.default(x, aic = aic, order.max = order.max, na.action = na.action,     series = series, ...)
 2: ar.yw(x, aic = aic, order.max = order.max, na.action = na.action,     series = series, ...)
 3: ar(x[, i], aic = TRUE)
 4: spectrum0.ar(x)
 5: doTryCatch(return(expr), name, parentenv, handler)
 6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
 7: tryCatchList(expr, classes, parentenv, handlers)
 8: tryCatch(expr, error = function(e) {    call <- conditionCall(e)    if (!is.null(call)) {        if (identical(call[[1L]], quote(doTryCatch)))             call <- sys.call(-4L)        dcall <- deparse(call, nlines = 1L)        prefix <- paste("Error in", dcall, ": ")        LONG <- 75L        sm <- strsplit(conditionMessage(e), "\n")[[1L]]        w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w")        if (is.na(w))             w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L],                 type = "b")        if (w > LONG)             prefix <- paste0(prefix, "\n  ")    }    else prefix <- "Error : "    msg <- paste0(prefix, conditionMessage(e), "\n")    .Internal(seterrmessage(msg[1L]))    if (!silent && isTRUE(getOption("show.error.messages"))) {        cat(msg, file = outFile)        .Internal(printDeferredWarnings())    }    invisible(structure(msg, class = "try-error", condition = e))})
 9: try(spectrum0.ar(x)$spec)
10: safespec0(x[[i]][, j])
11: summary.mcmc.list(x)
12: summary(x)
13: mcmc2bugs(samples, model.file = model.file, program = "jags",     DIC = DIC, DICOutput = NULL, n.iter = n.iter, n.burnin = n.burnin,     n.thin = n.thin, checkMissing = checkMissing)
14: jags(data = data, parameters.to.save = parameters.to.save, model.file = model.file,     n.chains = 1, n.iter = n.iter, n.burnin = n.burnin, n.thin = n.thin)
15: eval(c.expr, envir = args, enclos = envir)
16: eval(c.expr, envir = args, enclos = envir)
17: doTryCatch(return(expr), name, parentenv, handler)
18: tryCatchOne(expr, names, parentenv, handlers[[1L]])
19: tryCatchList(expr, classes, parentenv, handlers)
20: tryCatch(eval(c.expr, envir = args, enclos = envir), error = function(e) e)
21: FUN(X[[i]], ...)
22: lapply(X = S, FUN = FUN, ...)
23: doTryCatch(return(expr), name, parentenv, handler)
24: tryCatchOne(expr, names, parentenv, handlers[[1L]])
25: tryCatchList(expr, classes, parentenv, handlers)
26: tryCatch(expr, error = function(e) {    call <- conditionCall(e)    if (!is.null(call)) {        if (identical(call[[1L]], quote(doTryCatch)))             call <- sys.call(-4L)        dcall <- deparse(call, nlines = 1L)        prefix <- paste("Error in", dcall, ": ")        LONG <- 75L        sm <- strsplit(conditionMessage(e), "\n")[[1L]]        w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w")        if (is.na(w))             w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L],                 type = "b")        if (w > LONG)             prefix <- paste0(prefix, "\n  ")    }    else prefix <- "Error : "    msg <- paste0(prefix, conditionMessage(e), "\n")    .Internal(seterrmessage(msg[1L]))    if (!silent && isTRUE(getOption("show.error.messages"))) {        cat(msg, file = outFile)        .Internal(printDeferredWarnings())    }    invisible(structure(msg, class = "try-error", condition = e))})
27: try(lapply(X = S, FUN = FUN, ...), silent = TRUE)
28: sendMaster(try(lapply(X = S, FUN = FUN, ...), silent = TRUE))
29: FUN(X[[i]], ...)
30: lapply(seq_len(cores), inner.do)
31: mclapply(argsList, FUN, mc.preschedule = preschedule, mc.set.seed = set.seed,     mc.silent = silent, mc.cores = cores)
32: e$fun(obj, substitute(ex), parent.frame(), e$data)
33: foreach(i = 1:n.cluster) %dopar% {    jags(data = data, parameters.to.save = parameters.to.save,         model.file = model.file, n.chains = 1, n.iter = n.iter,         n.burnin = n.burnin, n.thin = n.thin)}
34: jags.parallel(data = d, parameters.to.save = p, model.file = tmf,     n.iter = n.iter, n.chains = ncores, n.burnin = n.burnin,     n.thin = n.thin)
35: mixSource(obs, sources, slope, ngens = 20000, ncores = 2)
36: eval(expr, envir)
37: eval(expr, envir)
38: withVisible(eval(expr, envir))
39: withCallingHandlers(code, error = function (e) rlang::entrace(e), message = function (cnd) {    watcher$capture_plot_and_output()    if (on_message$capture) {        watcher$push(cnd)    }    if (on_message$silence) {        invokeRestart("muffleMessage")    }}, warning = function (cnd) {    if (getOption("warn") >= 2 || getOption("warn") < 0) {        return()    }    watcher$capture_plot_and_output()    if (on_warning$capture) {        cnd <- sanitize_call(cnd)        watcher$push(cnd)    }    if (on_warning$silence) {        invokeRestart("muffleWarning")    }}, error = function (cnd) {    watcher$capture_plot_and_output()    cnd <- sanitize_call(cnd)    watcher$push(cnd)    switch(on_error, continue = invokeRestart("eval_continue"),         stop = invokeRestart("eval_stop"), error = NULL)})
40: eval(call)
41: eval(call)
42: with_handlers({    for (expr in tle$exprs) {        ev <- withVisible(eval(expr, envir))        watcher$capture_plot_and_output()        watcher$print_value(ev$value, ev$visible, envir)    }    TRUE}, handlers)
43: doWithOneRestart(return(expr), restart)
44: withOneRestart(expr, restarts[[1L]])
45: withRestartList(expr, restarts[-nr])
46: doWithOneRestart(return(expr), restart)
47: withOneRestart(withRestartList(expr, restarts[-nr]), restarts[[nr]])
48: withRestartList(expr, restarts)
49: withRestarts(with_handlers({    for (expr in tle$exprs) {        ev <- withVisible(eval(expr, envir))        watcher$capture_plot_and_output()        watcher$print_value(ev$value, ev$visible, envir)    }    TRUE}, handlers), eval_continue = function() TRUE, eval_stop = function() FALSE)
50: evaluate::evaluate(...)
51: evaluate(code, envir = env, new_device = FALSE, keep_warning = if (is.numeric(options$warning)) TRUE else options$warning,     keep_message = if (is.numeric(options$message)) TRUE else options$message,     stop_on_error = if (is.numeric(options$error)) options$error else {        if (options$error && options$include)             0L        else 2L    }, output_handler = knit_handlers(options$render, options))
52: in_dir(input_dir(), expr)
53: in_input_dir(evaluate(code, envir = env, new_device = FALSE,     keep_warning = if (is.numeric(options$warning)) TRUE else options$warning,     keep_message = if (is.numeric(options$message)) TRUE else options$message,     stop_on_error = if (is.numeric(options$error)) options$error else {        if (options$error && options$include)             0L        else 2L    }, output_handler = knit_handlers(options$render, options)))
54: eng_r(options)
55: block_exec(params)
56: call_block(x)
57: process_group(group)
58: withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    })
59: with_options(withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    }), list(rlang_trace_top_env = knit_global()))
60: xfun:::handle_error(with_options(withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    }), list(rlang_trace_top_env = knit_global())), function(loc) {    setwd(wd)    write_utf8(res, output %n% stdout())    paste0("\nQuitting from ", loc, if (!is.null(error))         paste0("\n", rule(), error, "\n", rule()))}, if (labels[i] != "") sprintf(" [%s]", labels[i]), get_loc)
61: process_file(text, output)
62: knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
63: rmarkdown::render(file, encoding = encoding, quiet = quiet, envir = globalenv(),     output_dir = getwd(), ...)
64: vweave_rmarkdown(...)
65: engine$weave(file, quiet = quiet, encoding = enc)
66: doTryCatch(return(expr), name, parentenv, handler)
67: tryCatchOne(expr, names, parentenv, handlers[[1L]])
68: tryCatchList(expr, classes, parentenv, handlers)
69: tryCatch({    engine$weave(file, quiet = quiet, encoding = enc)    setwd(startdir)    output <- find_vignette_product(name, by = "weave", engine = engine)    if (!have.makefile && vignette_is_tex(output)) {        texi2pdf(file = output, clean = FALSE, quiet = quiet)        output <- find_vignette_product(name, by = "texi2pdf",             engine = engine)    }    outputs <- c(outputs, output)}, error = function(e) {    thisOK <<- FALSE    fails <<- c(fails, file)    message(gettextf("Error: processing vignette '%s' failed with diagnostics:\n%s",         file, conditionMessage(e)))})
70: tools::buildVignettes(dir = "/Volumes/Builds/packages/sonoma-arm64/results/4.6/isoWater.Rcheck/vign_test/isoWater",     skip = TRUE, ser_elibs = "/Volumes/Temp/tmp/Rtmp4yY2Yr/file1314c30a4fc2b.rds")
An irrecoverable exception occurred. R is aborting now ...

Quitting from isoWater.Rmd:176-179 [mixSource1]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<error/rlang_error>
Error in `1:n.parameters`:
! argument of length 0
---
Backtrace:
    ▆
 1. └─isoWater::mixSource(obs, sources, slope, ngens = 20000, ncores = 2)
 2.   └─isoWater:::jags.parallel(...)
 3.     └─isoWater:::as.bugs.array2(...)
 4.       └─base::paste("P", 1:n.parameters, sep = "")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Error: processing vignette 'isoWater.Rmd' failed with diagnostics:
argument of length 0
--- failed re-building ‘isoWater.Rmd’

SUMMARY: processing the following file failed:
  ‘isoWater.Rmd’

Error: Vignette re-building failed.
Execution halted
OK r-devel-windows-x86_64

*


            
OK r-oldrel-macos-arm64

*


            
OK r-oldrel-macos-x86_64

*


            
OK r-oldrel-windows-x86_64

*


            
OK r-patched-linux-x86_64

*


            
OK r-release-linux-x86_64

*


            
OK r-release-macos-arm64

*


            
OK r-release-macos-x86_64

*


            
OK r-release-windows-x86_64

*


            

Check History

ERROR 13 OK · 0 NOTE · 0 WARNING · 1 ERROR · 0 FAILURE Mar 9, 2026
ERROR r-devel-macos-arm64

re-building of vignette outputs

Error(s) in re-building vignettes:
--- re-building ‘isoWater.Rmd’ using rmarkdown

 *** caught segfault ***
address 0x110, cause 'invalid permissions'

Traceback:
 1: ar.yw.default(x, aic = aic, order.max = order.max, na.action = na.action,     series = series, ...)
 2: ar.yw(x, aic = aic, order.max = order.max, na.action = na.action,     series = series, ...)
 3: ar(x[, i], aic = TRUE)
 4: spectrum0.ar(x)
 5: doTryCatch(return(expr), name, parentenv, handler)
 6: tryCatchOne(expr, names, parent

Dependency Network

Dependencies Reverse dependencies R2jags abind R2WinBUGS doParallel foreach httr jsonlite isoWater

Version History

new 1.2.1 Mar 10, 2026