Skip to content

SeaSondeR

Radial Metrics from SeaSonde HF-Radar Data

v0.2.8 · Apr 30, 2025 · GPL (>= 3)

Description

Read CODAR's SeaSonde High-Frequency Radar spectra files, compute radial metrics, and generate plots for spectra and antenna pattern data. Implementation is based in technical manuals, publications and patents, please refer to the following documents for more information: Barrick and Lipa (1999) <https://codar.com/images/about/patents/05990834.PDF>; CODAR Ocean Sensors (2002) <http://support.codar.com/Technicians_Information_Page_for_SeaSondes/Docs/Informative/FirstOrder_Settings.pdf>; Lipa et al. (2006) <doi:10.1109/joe.2006.886104>; Paolo et al. (2007) <doi:10.1109/oceans.2007.4449265>; CODAR Ocean Sensors (2009a) <http://support.codar.com/Technicians_Information_Page_for_SeaSondes/Docs/GuidesToFileFormats/File_AntennaPattern.pdf>; CODAR Ocean Sensors (2009b) <http://support.codar.com/Technicians_Information_Page_for_SeaSondes/Docs/GuidesToFileFormats/File_CrossSpectraReduced.pdf>; CODAR Ocean Sensors (2016a) <http://support.codar.com/Technicians_Information_Page_for_SeaSondes/Manuals_Documentation_Release_8/File_Formats/File_Cross_Spectra_V6.pdf>; CODAR Ocean Sensors (2016b) <http://support.codar.com/Technicians_Information_Page_for_SeaSondes/Manuals_Documentation_Release_8/File_Formats/FIle_Reduced_Spectra.pdf>; CODAR Ocean Sensors (2016c) <http://support.codar.com/Technicians_Information_Page_for_SeaSondes/Manuals_Documentation_Release_8/Application_Guides/Guide_SpectraPlotterMap.pdf>; Bushnell and Worthington (2022) <doi:10.25923/4c5x-g538>.

Downloads

633

Last 30 days

5790th

633

Last 90 days

633

Last year

CRAN Check Status

1 ERROR
3 NOTE
10 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 NOTE
r-oldrel-macos-x86_64 NOTE
r-oldrel-windows-x86_64 NOTE
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 (16 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

examples

Running examples in ‘SeaSondeR-Ex.R’ failed
The error most likely occurred in:

> ### Name: seasonder_MUSICLonLat
> ### Title: Map MUSIC Bearings to Geographic Coordinates
> ### Aliases: seasonder_MUSICLonLat seasonder_MUSIC_LonLat
> 
> ### ** Examples
> 
> # Create a SeaSondeRCS object for MUSIC example
> cs_file <- system.file("css_data/CSS_TORA_24_04_04_0700.cs", package = "SeaSondeR")
> apm_file <- system.file("css_data/MeasPattern.txt", package = "SeaSondeR")
> apm_obj  <- seasonder_readSeaSondeRAPMFile(apm_file)
seasonder_createSeaSondeRAPM:  APM object created successfully.
> cs_obj   <- seasonder_createSeaSondeRCS(cs_file, seasonder_apm_object = apm_obj)
new_SeaSondeRCS:  SeaSondeRCS object created successfully.
> cs_obj <- seasonder_initMUSICData(
+  cs_obj,
+  range_cells = c(rep(5,11), rep(4,11)),
+  doppler_bins = c(c(669:679),c(674:684))
+ )
> cs_obj <- seasonder_runMUSIC(cs_obj)
seasonder_runMUSIC:  MUSIC algorithm started.

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

Traceback:
 1: eigen(C, symmetric = TRUE)
 2: .f(.x[[i]], ...)
 3: .Primitive(".Call")(list(name = "map_impl", address = <pointer: 0x600001e929a0>,     dll = list(name = "purrr", path = "/Volumes/Builds/packages/sonoma-arm64/Rlib/4.6/purrr/libs/purrr.so",         dynamicLookup = FALSE, handle = <pointer: 0x76373080>,         info = <pointer: 0x600003a90cc0>, forceSymbols = FALSE),     numParameters = 6L), <environment>, "list", FALSE, 14L, NULL,     1L)
 4: call_with_cleanup(map_impl, environment(), .type, .progress,     n, names, i)
 5: withCallingHandlers(expr, error = function(cnd) {    if (i == 0L) {    }    else {        message <- c(i = "In index: {i}.")        if (!is.null(names) && !is.na(names[[i]]) && names[[i]] !=             "") {            name <- names[[i]]            message <- c(message, i = "With name: {name}.")        }        else {            name <- NULL        }        cli::cli_abort(message, location = i, name = name, parent = cnd,             call = error_call, class = "purrr_error_indexed")    }})
 6: with_indexed_errors(i = i, names = names, error_call = .purrr_error_call,     call_with_cleanup(map_impl, environment(), .type, .progress,         n, names, i))
 7: map_("list", .x, .f, ..., .progress = .progress)
 8: purrr::map(cov, seasonder_eigen_decomp_C)
 9: .Call(dplyr_mask_eval_all_mutate, quo, private)
10: eval()
11: mask$eval_all_mutate(quo)
12: mutate_col(dots[[i]], data, mask, new_columns)
13: withCallingHandlers(for (i in seq_along(dots)) {    poke_error_context(dots, i, mask = mask)    context_poke("column", old_current_column)    new_columns <- mutate_col(dots[[i]], data, mask, new_columns)}, error = dplyr_error_handler(dots = dots, mask = mask, bullets = mutate_bullets,     error_call = error_call, error_class = "dplyr:::mutate_error"),     warning = dplyr_warning_handler(state = warnings_state, mask = mask,         error_call = error_call))
14: mutate_cols(.data, dplyr_quosures(...), by)
15: mutate.data.frame(., eigen = purrr::map(cov, seasonder_eigen_decomp_C))
16: dplyr::mutate(., eigen = purrr::map(cov, seasonder_eigen_decomp_C))
17: MUSIC %<>% dplyr::mutate(eigen = purrr::map(cov, seasonder_eigen_decomp_C))
18: seasonder_MUSICCovDecomposition(.)
19: out %<>% seasonder_MUSICCovDecomposition()
20: seasonder_runMUSIC(cs_obj)
An irrecoverable exception occurred. R is aborting now ...
ERROR r-devel-macos-arm64

re-building of vignette outputs

Error(s) in re-building vignettes:
sh: line 1: 24231 Segmentation fault: 11  '/Library/Frameworks/R.framework/Resources/bin/R' --vanilla --no-echo > '/Volumes/Temp/tmp/RtmpjMSuNr/file5e7d117501a9' 2>&1 < '/Volumes/Temp/tmp/RtmpjMSuNr/file5e7d18c00733'
--- re-building ‘RadialMetricsExport.Rmd’ using rmarkdown

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

Traceback:
 1: eigen(C, symmetric = TRUE)
 2: .f(.x[[i]], ...)
 3: .Primitive(".Call")(list(name = "map_impl", address = <pointer: 0x600000eda040>,     dll = list(name = "purrr", path = "/Volumes/Builds/packages/sonoma-arm64/Rlib/4.6/purrr/libs/purrr.so",         dynamicLookup = FALSE, handle = <pointer: 0x76374660>,         info = <pointer: 0x600002ad4a20>, forceSymbols = FALSE),     numParameters = 6L), <environment>, "list", FALSE, 2318L,     NULL, 1L)
 4: call_with_cleanup(map_impl, environment(), .type, .progress,     n, names, i)
 5: withCallingHandlers(expr, error = function(cnd) {    if (i == 0L) {    }    else {        message <- c(i = "In index: {i}.")        if (!is.null(names) && !is.na(names[[i]]) && names[[i]] !=             "") {            name <- names[[i]]            message <- c(message, i = "With name: {name}.")        }        else {            name <- NULL        }        cli::cli_abort(message, location = i, name = name, parent = cnd,             call = error_call, class = "purrr_error_indexed")    }})
 6: with_indexed_errors(i = i, names = names, error_call = .purrr_error_call,     call_with_cleanup(map_impl, environment(), .type, .progress,         n, names, i))
 7: map_("list", .x, .f, ..., .progress = .progress)
 8: purrr::map(cov, seasonder_eigen_decomp_C)
 9: .Call(dplyr_mask_eval_all_mutate, quo, private)
10: eval()
11: mask$eval_all_mutate(quo)
12: mutate_col(dots[[i]], data, mask, new_columns)
13: withCallingHandlers(for (i in seq_along(dots)) {    poke_error_context(dots, i, mask = mask)    context_poke("column", old_current_column)    new_columns <- mutate_col(dots[[i]], data, mask, new_columns)}, error = dplyr_error_handler(dots = dots, mask = mask, bullets = mutate_bullets,     error_call = error_call, error_class = "dplyr:::mutate_error"),     warning = dplyr_warning_handler(state = warnings_state, mask = mask,         error_call = error_call))
14: mutate_cols(.data, dplyr_quosures(...), by)
15: mutate.data.frame(., eigen = purrr::map(cov, seasonder_eigen_decomp_C))
16: dplyr::mutate(., eigen = purrr::map(cov, seasonder_eigen_decomp_C))
17: MUSIC %<>% dplyr::mutate(eigen = purrr::map(cov, seasonder_eigen_decomp_C))
18: seasonder_MUSICCovDecomposition(.)
19: out %<>% seasonder_MUSICCovDecomposition()
20: seasonder_runMUSIC(.)
21: out %<>% seasonder_runMUSIC()
22: seasonder_runMUSICInFOR(cs_obj)
23: eval(expr, envir)
24: eval(expr, envir)
25: withVisible(eval(expr, envir))
26: 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)})
27: eval(call)
28: eval(call)
29: 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)
30: doWithOneRestart(return(expr), restart)
31: withOneRestart(expr, restarts[[1L]])
32: withRestartList(expr, restarts[-nr])
33: doWithOneRestart(return(expr), restart)
34: withOneRestart(withRestartList(expr, restarts[-nr]), restarts[[nr]])
35: withRestartList(expr, restarts)
36: 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)
37: evaluate::evaluate(...)
38: 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))
39: in_dir(input_dir(), expr)
40: 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)))
41: eng_r(options)
42: block_exec(params)
43: call_block(x)
44: process_group(group)
45: 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)    })
46: 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()))
47: 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)
48: process_file(text, output)
49: knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
50: rmarkdown::render(file, encoding = encoding, quiet = quiet, envir = globalenv(),     output_dir = getwd(), ...)
51: vweave_rmarkdown(...)
52: engine$weave(file, quiet = quiet, encoding = enc)
53: doTryCatch(return(expr), name, parentenv, handler)
54: tryCatchOne(expr, names, parentenv, handlers[[1L]])
55: tryCatchList(expr, classes, parentenv, handlers)
56: 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)    }}, error = function(e) {    OK <<- FALSE    message(gettextf("Error: processing vignette '%s' failed with diagnostics:\n%s",         file, conditionMessage(e)))})
57: tools:::.buildOneVignette("RadialMetricsExport.Rmd", "/Volumes/Builds/packages/sonoma-arm64/results/4.6/SeaSondeR.Rcheck/vign_test/SeaSondeR",     TRUE, FALSE, "RadialMetricsExport", "UTF-8", "/Volumes/Temp/tmp/RtmpjMSuNr/file5e7d5996295a.rds")
An irrecoverable exception occurred. R is aborting now ...
--- re-building ‘SeaSondeAPM.Rmd’ using rmarkdown
--- finished re-building ‘SeaSondeAPM.Rmd’

--- re-building ‘SeaSondeCS.Rmd’ using rmarkdown
--- finished re-building ‘SeaSondeCS.Rmd’

--- re-building ‘intro.Rmd’ using rmarkdown
--- finished re-building ‘intro.Rmd’

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

Error: Vignette re-building failed.
Execution halted
ERROR r-devel-macos-arm64

tests

  Running ‘testthat.R’ [3s/3s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > # This file is part of the standard setup for testthat.
  > # It is recommended that you do not modify it.
  > #
  > # Where should you do additional test configuration?
  > # Learn more about the roles of various files in:
  > # * https://r-pkgs.org/testing-design.html#sec-tests-files-overview
  > # * https://testthat.r-lib.org/articles/special-files.html
  > 
  > library(testthat)
  > library(SeaSondeR)
  > 
  > test_check("SeaSondeR")
  
  Attaching package: 'magrittr'
  
  The following objects are masked from 'package:testthat':
  
      equals, is_less_than, not
  
  
   *** caught segfault ***
  address 0x1, cause 'invalid permissions'
  
  Traceback:
   1: eigen(C, symmetric = TRUE)
   2: .f(.x[[i]], ...)
   3: .Primitive(".Call")(list(name = "map_impl", address = <pointer: 0x6000025fc700>,     dll = list(name = "purrr", path = "/Volumes/Builds/packages/sonoma-arm64/Rlib/4.6/purrr/libs/purrr.so",         dynamicLookup = FALSE, handle = <pointer: 0x76384250>,         info = <pointer: 0x6000001fc180>, forceSymbols = FALSE),     numParameters = 6L), <environment>, "list", FALSE, 4608L,     NULL, 1L)
   4: call_with_cleanup(map_impl, environment(), .type, .progress,     n, names, i)
   5: withCallingHandlers(expr, error = function(cnd) {    if (i == 0L) {    }    else {        message <- c(i = "In index: {i}.")        if (!is.null(names) && !is.na(names[[i]]) && names[[i]] !=             "") {            name <- names[[i]]            message <- c(message, i = "With name: {name}.")        }        else {            name <- NULL        }        cli::cli_abort(message, location = i, name = name, parent = cnd,             call = error_call, class = "purrr_error_indexed")    }})
   6: with_indexed_errors(i = i, names = names, error_call = .purrr_error_call,     call_with_cleanup(map_impl, environment(), .type, .progress,         n, names, i))
   7: map_("list", .x, .f, ..., .progress = .progress)
   8: purrr::map(cov, seasonder_eigen_decomp_C)
   9: .Call(dplyr_mask_eval_all_mutate, quo, private)
  10: eval()
  11: mask$eval_all_mutate(quo)
  12: mutate_col(dots[[i]], data, mask, new_columns)
  13: withCallingHandlers(for (i in seq_along(dots)) {    poke_error_context(dots, i, mask = mask)    context_poke("column", old_current_column)    new_columns <- mutate_col(dots[[i]], data, mask, new_columns)}, error = dplyr_error_handler(dots = dots, mask = mask, bullets = mutate_bullets,     error_call = error_call, error_class = "dplyr:::mutate_error"),     warning = dplyr_warning_handler(state = warnings_state, mask = mask,         error_call = error_call))
  14: mutate_cols(.data, dplyr_quosures(...), by)
  15: mutate.data.frame(., eigen = purrr::map(cov, seasonder_eigen_decomp_C))
  16: dplyr::mutate(., eigen = purrr::map(cov, seasonder_eigen_decomp_C))
  17: MUSIC %<>% dplyr::mutate(eigen = purrr::map(cov, seasonder_eigen_decomp_C))
  18: seasonder_MUSICCovDecomposition(.)
  19: out %<>% seasonder_MUSICCovDecomposition()
  20: seasonder_runMUSIC(.)
  21: out %<>% seasonder_runMUSIC()
  22: seasonder_runMUSICInFOR(seasonder_cs_obj)
  23: eval(code, test_env)
  24: eval(code, test_env)
  25: withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt)
  26: doTryCatch(return(expr), name, parentenv, handler)
  27: tryCatchOne(expr, names, parentenv, handlers[[1L]])
  28: tryCatchList(expr, classes, parentenv, handlers)
  29: tryCatch(withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt), error = handle_fatal)
  30: doWithOneRestart(return(expr), restart)
  31: withOneRestart(expr, restarts[[1L]])
  32: withRestarts(tryCatch(withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt), error = handle_fatal),     end_test = function() {    })
  33: test_code(code, parent.frame())
  34: test_that("El fichero exportado coincide con el fichero de referencia",     {        CS_file_path <- system.file("css_data/CSS_TORA_24_04_04_0700.cs",             package = "SeaSondeR")        APM_path <- system.file("css_data/MeasPattern.txt", package = "SeaSondeR")        seasonder_disableMessages()        seasonder_apm_obj <- seasonder_readSeaSondeRAPMFile(APM_path)        seasonder_cs_obj <- seasonder_createSeaSondeRCS(CS_file_path,             seasonder_apm_object = seasonder_apm_obj)        first_order_settings <- list(nsm = 2, fdown = 10^(10/10),             flim = 10^(20/10), noisefact = 10^(6/10), currmax = 2,             reject_distant_bragg = TRUE, reject_noise_ionospheric = FALSE,             reject_noise_ionospheric_threshold = 0)        seasonder_cs_obj <- seasonder_computeFORs(seasonder_cs_obj,             FOR_control = first_order_settings)        MUSIC_options <- list(doppler_interpolation = 2, smoothNoiseLevel = TRUE,             PPMIN = 5, PWMAX = 50)        seasonder_cs_obj <- seasonder_setMUSICOptions(seasonder_cs_obj,             MUSIC_options)        seasonder_cs_obj <- seasonder_runMUSICInFOR(seasonder_cs_obj)        lluv_temp_path <- tempfile(pattern = "CSS_TORA_24_04_04_0700",             fileext = ".ruv")        AngSeg <- purrr::list_c(lapply(45:61, function(i) list(c(i,             313, 360), c(i, 0, 31))))        seasonder_exportLLUVRadialMetrics(seasonder_cs_obj, LLUV_path = lluv_temp_path,             AngSeg = AngSeg)        expected_metrics_text <- readLines(system.file("css_data/CSS_TORA_24_04_04_0700.ruv",             package = "SeaSondeR"))        radial_metrics_text <- readLines(lluv_temp_path)        filter_text <- function(txt) {            txt[!grepl("^%ProcessedTimeStamp", txt)]        }        expected_metrics_text <- filter_text(expected_metrics_text)        radial_metrics_text <- filter_text(radial_metrics_text)        expect_equal(radial_metrics_text, expected_metrics_text)    })
  35: eval(code, test_env)
  36: eval(code, test_env)
  37: withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt)
  38: doTryCatch(return(expr), name, parentenv, handler)
  39: tryCatchOne(expr, names, parentenv, handlers[[1L]])
  40: tryCatchList(expr, classes, parentenv, handlers)
  41: tryCatch(withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt), error = handle_fatal)
  42: doWithOneRestart(return(expr), restart)
  43: withOneRestart(expr, restarts[[1L]])
  44: withRestarts(tryCatch(withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt), error = handle_fatal),     end_test = function() {    })
  45: test_code(code = exprs, env = env, reporter = get_reporter() %||%     StopReporter$new())
  46: source_file(path, env = env(env), desc = desc, shuffle = shuffle,     error_call = error_call)
  47: FUN(X[[i]], ...)
  48: lapply(test_paths, test_one_file, env = env, desc = desc, shuffle = shuffle,     error_call = error_call)
  49: doTryCatch(return(expr), name, parentenv, handler)
  50: tryCatchOne(expr, names, parentenv, handlers[[1L]])
  51: tryCatchList(expr, classes, parentenv, handlers)
  52: tryCatch(code, testthat_abort_reporter = function(cnd) {    cat(conditionMessage(cnd), "\n")    NULL})
  53: with_reporter(reporters$multi, lapply(test_paths, test_one_file,     env = env, desc = desc, shuffle = shuffle, error_call = error_call))
  54: test_files_serial(test_dir = test_dir, test_package = test_package,     test_paths = test_paths, load_helpers = load_helpers, reporter = reporter,     env = env, stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,     desc = desc, load_package = load_package, shuffle = shuffle,     error_call = error_call)
  55: test_files(test_dir = path, test_paths = test_paths, test_package = package,     reporter = reporter, load_helpers = load_helpers, env = env,     stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,     load_package = load_package, parallel = parallel, shuffle = shuffle)
  56: test_dir("testthat", package = package, reporter = reporter,     ..., load_package = "installed")
  57: test_check("SeaSondeR")
  An irrecoverable exception occurred. R is aborting now ...
OK r-devel-windows-x86_64

*


            
NOTE r-oldrel-macos-arm64

installed package size

  installed size is 10.1Mb
  sub-directories of 1Mb or more:
    css_data   8.7Mb
NOTE r-oldrel-macos-x86_64

installed package size

  installed size is 10.1Mb
  sub-directories of 1Mb or more:
    css_data   8.7Mb
NOTE r-oldrel-windows-x86_64

installed package size

  installed size is 10.0Mb
  sub-directories of 1Mb or more:
    css_data   8.7Mb
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 10 OK · 3 NOTE · 0 WARNING · 1 ERROR · 0 FAILURE Mar 9, 2026
ERROR r-devel-macos-arm64

examples

Running examples in ‘SeaSondeR-Ex.R’ failed
The error most likely occurred in:

> ### Name: seasonder_MUSICLonLat
> ### Title: Map MUSIC Bearings to Geographic Coordinates
> ### Aliases: seasonder_MUSICLonLat seasonder_MUSIC_LonLat
> 
> ### ** Examples
> 
> # Create a SeaSondeRCS object for MUSIC example
> cs_file <- system.file("css_data/CSS_TORA_24_04_04_0700.cs", package = "SeaSondeR")
> apm_file <- system.file("css_data/MeasPattern.txt", package = "SeaSondeR")
> apm_obj  <- seasonder_readSea
NOTE r-oldrel-macos-arm64

installed package size

  installed size is 10.1Mb
  sub-directories of 1Mb or more:
    css_data   8.7Mb
NOTE r-oldrel-macos-x86_64

installed package size

  installed size is 10.1Mb
  sub-directories of 1Mb or more:
    css_data   8.7Mb
NOTE r-oldrel-windows-x86_64

installed package size

  installed size is 10.0Mb
  sub-directories of 1Mb or more:
    css_data   8.7Mb

Dependency Network

Dependencies Reverse dependencies bit64 bitops constants data.table dplyr geosphere (>= 1.5.18) ggplot2 glue lubridate (>= 1.9.3) magrittr pracma purrr (>= 1.0.2) rlang slider stringr (>= 1.5.0) +6 more dependencies SeaSondeR

Version History

new 0.2.8 Mar 9, 2026