From 88eedb9074956a5b81a4a8dd3e8486c33828c5f2 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 4 Aug 2022 15:55:07 +0200 Subject: [PATCH 1/2] Retrieve lon and lat in startR_array if they're under --- R/as.s2dv_cube.R | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/R/as.s2dv_cube.R b/R/as.s2dv_cube.R index c8e05365..d85b9610 100644 --- a/R/as.s2dv_cube.R +++ b/R/as.s2dv_cube.R @@ -119,14 +119,38 @@ as.s2dv_cube <- function(object) { result <- list() result$data <- as.vector(object) dim(result$data) <- dim(object) - result$lon <- attributes(object)$Variables$dat1$longitude - result$lat <- attributes(object)$Variables$dat1$latitude - vars <- which(names(attributes(object)$Variables$common) != 'time') - if (length(vars) > 1) { - warning("More than one variable has been provided and ", - "only the first one will be used.") - vars <- vars[1] - } + + dat_attr_names <- names(attributes(object)$Variables$dat1) + common_attr_names <- names(attributes(object)$Variables$common) + # $lon + known_lon_names <- s2dv:::.KnownLonNames() + if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lon_names)])) { + result$lon <- attributes(object)$Variables$dat1[[dat_attr_names[which(dat_attr_names %in% known_lon_names)]]] + } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lon_names)])) { + result$lon <- attributes(object)$Variables$common[[common_attr_names[which(common_attr_names %in% known_lon_names)]]] + } else { + warning("'lon' is not found in this object.") + result$lon <- NULL + } + # $lat + known_lat_names <- s2dv:::.KnownLatNames() + if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lat_names)])) { + result$lat <- attributes(object)$Variables$dat1[[dat_attr_names[which(dat_attr_names %in% known_lat_names)]]] + } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lat_names)])) { + result$lat <- attributes(object)$Variables$common[[common_attr_names[which(common_attr_names %in% known_lat_names)]]] + } else { + warning("'lat' is not found in this object.") + result$lat <- NULL + } + + vars <- which(!common_attr_names %in% c("time", known_lon_names, known_lat_names)) + + if (length(vars) > 1) { + warning("More than one variable has been provided and ", + "only the first one '", common_attr_names[vars[1]],"' will be used.") + vars <- vars[1] + } + Variable <- list() Variable$varName <- names(attributes(object)$Variables$common)[vars] attr(Variable, 'variable') <- attributes(object)$Variables$common[[vars]] -- GitLab From 8bab7188eb7fd230e3a0e06c63b502c7ed376388 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 5 Aug 2022 15:32:25 +0200 Subject: [PATCH 2/2] Improve if condition --- R/as.s2dv_cube.R | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/R/as.s2dv_cube.R b/R/as.s2dv_cube.R index d85b9610..5c656a51 100644 --- a/R/as.s2dv_cube.R +++ b/R/as.s2dv_cube.R @@ -124,9 +124,11 @@ as.s2dv_cube <- function(object) { common_attr_names <- names(attributes(object)$Variables$common) # $lon known_lon_names <- s2dv:::.KnownLonNames() - if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lon_names)])) { + if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lon_names)]) & + !identical(dat_attr_names[which(dat_attr_names %in% known_lon_names)], character(0))) { result$lon <- attributes(object)$Variables$dat1[[dat_attr_names[which(dat_attr_names %in% known_lon_names)]]] - } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lon_names)])) { + } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lon_names)]) & + !identical(common_attr_names[which(common_attr_names %in% known_lon_names)], character(0))) { result$lon <- attributes(object)$Variables$common[[common_attr_names[which(common_attr_names %in% known_lon_names)]]] } else { warning("'lon' is not found in this object.") @@ -134,9 +136,11 @@ as.s2dv_cube <- function(object) { } # $lat known_lat_names <- s2dv:::.KnownLatNames() - if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lat_names)])) { + if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lat_names)]) & + !identical(dat_attr_names[which(dat_attr_names %in% known_lat_names)], character(0))) { result$lat <- attributes(object)$Variables$dat1[[dat_attr_names[which(dat_attr_names %in% known_lat_names)]]] - } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lat_names)])) { + } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lat_names)]) & + !identical(common_attr_names[which(common_attr_names %in% known_lat_names)], character(0))) { result$lat <- attributes(object)$Variables$common[[common_attr_names[which(common_attr_names %in% known_lat_names)]]] } else { warning("'lat' is not found in this object.") -- GitLab