Reads a variable from a netCDF file, applies a function over one or more of its dimensions using [base::apply()], and writes the result to a new netCDF file.
Usage
nc_apply(
filename,
varid,
MARGIN,
FUN,
...,
output = NULL,
drop = FALSE,
newdim = NULL,
name = NULL,
longname = NULL,
units = NULL,
compression = NA,
verbose = FALSE,
force_v4 = TRUE,
ignore.case = FALSE
)Arguments
- filename
Character string giving the path to the input netCDF file.
- varid
Character string giving the name of the variable to process. If missing and the file contains a single variable, that variable is used.
- MARGIN
Integer or character vector specifying the dimensions to retain in the output, as in [base::apply()]. Dimension names may be used.
- FUN
Function to apply.
- ...
Additional arguments passed to `FUN`.
- output
Character string giving the path to the output netCDF file to create.
- drop
Logical. Currently not implemented.
- newdim
Optional numeric values for the dimension created when `FUN` returns a vector of length greater than one.
- name
Optional character string giving the name of the output variable. By default, the original variable name is used.
- longname
Optional character string giving the long name of the output variable. By default, a name based on `FUN` and the original variable long name is generated.
- units
Optional character string giving the units of the output variable. By default, the units of the input variable are used.
- compression
Optional numeric compression level for the output variable.
- verbose
Logical. Currently unused.
- force_v4
Logical. Currently unused internally.
- ignore.case
Logical. If `TRUE`, ignore case when matching dimension names supplied in `MARGIN`.
Details
The selected variable is read into memory and processed with [base::apply()]. The output retains the dimensions specified in `MARGIN`. If `FUN` returns a vector of length greater than one, an additional dimension is appended to the result; its coordinate values are taken from `newdim` when provided, or generated automatically otherwise.
Examples
if (FALSE) { # \dontrun{
## Mean over the time dimension
nc_apply(
filename = "input.nc",
varid = "temp",
MARGIN = c("lon", "lat"),
FUN = mean,
na.rm = TRUE,
output = "temp_mean.nc"
)
## Quantiles over the depth dimension
nc_apply(
filename = "input.nc",
varid = "temp",
MARGIN = c("lon", "lat"),
FUN = quantile,
probs = c(0.25, 0.5, 0.75),
newdim = c(25, 50, 75),
output = "temp_quantiles.nc"
)
} # }