From b64925a513778f2a8395487d9b60d02c9e587ba4 Mon Sep 17 00:00:00 2001 From: vagudets Date: Mon, 15 Jul 2024 12:49:42 +0200 Subject: [PATCH 1/4] Add if condition to generate correct paths when a dimension has multiple depending dimensions and the 'all' selector is used --- R/zzz.R | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/R/zzz.R b/R/zzz.R index 267c27f..b25f94c 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -382,6 +382,14 @@ find_ufd_value <- function(undefined_file_dims, dat, i, replace_values, depending_dims <- names(depending_file_dims)[which(sapply(depending_file_dims, function(x) u_file_dim %in% x))] replace_values[depending_dims] <- rep('*', length(depending_dims)) } + # If u_file_dim depends on the same depended dimension as another depending + # dimension, then the value of the depending dim should be replaced with '*' + # to avoid only the first value being used, which can result in the wrong + # path specification. + if (depending_file_dims[[-which(names(depending_file_dims) == u_file_dim)]] == depended_dim) { + depending_dims <- names(depending_file_dims)[-which(names(depending_file_dims) == u_file_dim)] + replace_values[depending_dims] <- rep('*', length(depending_dims)) + } for (j in 1:length(depended_dim_values)) { parsed_values <- c() if (!is.null(depended_dim)) { -- GitLab From 96e28a26aaef041f968338bedaa053cf1e5418e7 Mon Sep 17 00:00:00 2001 From: vagudets Date: Mon, 15 Jul 2024 13:59:37 +0200 Subject: [PATCH 2/4] Fix if condition --- R/zzz.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/zzz.R b/R/zzz.R index b25f94c..5518474 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -386,7 +386,8 @@ find_ufd_value <- function(undefined_file_dims, dat, i, replace_values, # dimension, then the value of the depending dim should be replaced with '*' # to avoid only the first value being used, which can result in the wrong # path specification. - if (depending_file_dims[[-which(names(depending_file_dims) == u_file_dim)]] == depended_dim) { + if (length(depending_file_dims) > 1 && + depending_file_dims[[-which(names(depending_file_dims) == u_file_dim)]] == depended_dim) { depending_dims <- names(depending_file_dims)[-which(names(depending_file_dims) == u_file_dim)] replace_values[depending_dims] <- rep('*', length(depending_dims)) } -- GitLab From 3d253a71a8ae3e78a281619dfece19b1e712c748 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 16 Jul 2024 16:35:32 +0200 Subject: [PATCH 3/4] Bugfix: consider case where there are multiple depended dims or more than two depending dims --- R/zzz.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/zzz.R b/R/zzz.R index 5518474..5b11f97 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -386,9 +386,10 @@ find_ufd_value <- function(undefined_file_dims, dat, i, replace_values, # dimension, then the value of the depending dim should be replaced with '*' # to avoid only the first value being used, which can result in the wrong # path specification. + other_depending_file_dims <- depending_file_dims[-which(names(depending_file_dims) == u_file_dim)] if (length(depending_file_dims) > 1 && - depending_file_dims[[-which(names(depending_file_dims) == u_file_dim)]] == depended_dim) { - depending_dims <- names(depending_file_dims)[-which(names(depending_file_dims) == u_file_dim)] + any(unlist(other_depending_file_dims) == depended_dim)) { + depending_dims <- names(other_depending_file_dims)[which(other_depending_file_dims == "syear")] replace_values[depending_dims] <- rep('*', length(depending_dims)) } for (j in 1:length(depended_dim_values)) { -- GitLab From ba06cfcc968ac53ce3e44671c99a8f1a9822ca5d Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 16 Jul 2024 17:02:40 +0200 Subject: [PATCH 4/4] Bugfix: hardcoded depended dim --- R/zzz.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/zzz.R b/R/zzz.R index 5b11f97..f198746 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -389,7 +389,7 @@ find_ufd_value <- function(undefined_file_dims, dat, i, replace_values, other_depending_file_dims <- depending_file_dims[-which(names(depending_file_dims) == u_file_dim)] if (length(depending_file_dims) > 1 && any(unlist(other_depending_file_dims) == depended_dim)) { - depending_dims <- names(other_depending_file_dims)[which(other_depending_file_dims == "syear")] + depending_dims <- names(other_depending_file_dims)[which(other_depending_file_dims == depended_dim)] replace_values[depending_dims] <- rep('*', length(depending_dims)) } for (j in 1:length(depended_dim_values)) { -- GitLab