Skip to content

Commit

Permalink
Makes WriteNetCDF robust to bad order.
Browse files Browse the repository at this point in the history
  • Loading branch information
eliocamp committed Sep 24, 2024
1 parent 2c021a4 commit 5a07c98
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions R/WriteNetCDF.R
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ WriteNetCDF <- function(data, file, vars, dims = NULL) {
}

if (is.null(dims)) {
dims <- setdiff(colnames(data), names(vars))
dims <- rev(setdiff(colnames(data), names(vars)))
}

if (is.null(names(dims))) {
Expand All @@ -20,9 +20,13 @@ WriteNetCDF <- function(data, file, vars, dims = NULL) {
stop("dims not found in data")
}

order <- do.call(base::order, args = lapply(rev(names(dims)), \(x) data[[x]]))

nc_dims <- vector(length(dims), mode = "list")
for (d in seq_along(dims)) {
vals <- as.numeric(unique(data[[names(dims)[d]]]))
vals <- data[[names(dims)[d]]][order]
vals <- as.numeric(unique(vals))

n <- length(vals)
units <- get_units(data[[names(dims)[d]]])
nc_dims[[d]] <- ncdf4::ncdim_def(name = dims[d],
Expand All @@ -45,20 +49,19 @@ WriteNetCDF <- function(data, file, vars, dims = NULL) {

}

nc_file <- nc_create(file, nc_vars)
nc_file <- ncdf4::nc_create(file, nc_vars)

for (v in seq_along(vars)) {
ncdf4::ncvar_put(nc_file,
varid = nc_vars[[v]],
vals = field[[names(vars[v])]])
vals = data[[names(vars[v])]][order])
}

ncdf4::nc_close(nc_file)

return(invisible(file))
}


get_units <- function(x) {
UseMethod("get_units")
}
Expand Down

0 comments on commit 5a07c98

Please sign in to comment.