Added new function condReplace.R#204
Open
bodirsky wants to merge 3 commits intopik-piam:masterfrom
Open
Conversation
codeZeilen
reviewed
Mar 18, 2026
Comment on lines
+26
to
+37
| condReplace <- function(x, condition, replace) { | ||
|
|
||
| if (is.function(condition)) { | ||
| replace <- magpie_expand(x = as.magpie(replace), ref = x) | ||
| x[condition(x)] <- replace[condition(x)] | ||
| } else { | ||
| replace <- magpie_expand(x = as.magpie(replace), ref = x) | ||
| condition <- magpie_expand(x = as.magpie(condition), ref = x) | ||
| x[as.logical(condition)] <- replace[as.logical(condition)] | ||
| } | ||
| return(x) | ||
| } |
Member
There was a problem hiding this comment.
The following removes the redundant applications of the condition function and the conversions to logical. Also pulls out the actual replacement.
Suggested change
| condReplace <- function(x, condition, replace) { | |
| if (is.function(condition)) { | |
| replace <- magpie_expand(x = as.magpie(replace), ref = x) | |
| x[condition(x)] <- replace[condition(x)] | |
| } else { | |
| replace <- magpie_expand(x = as.magpie(replace), ref = x) | |
| condition <- magpie_expand(x = as.magpie(condition), ref = x) | |
| x[as.logical(condition)] <- replace[as.logical(condition)] | |
| } | |
| return(x) | |
| } | |
| condReplace <- function(x, condition, replace) { | |
| if (is.function(condition)) { | |
| replace <- magpie_expand(x = as.magpie(replace), ref = x) | |
| condition <- as.logical(condition(x)) | |
| } else { | |
| replace <- magpie_expand(x = as.magpie(replace), ref = x) | |
| condition <- as.logical(magpie_expand(x = as.magpie(condition), ref = x)) | |
| } | |
| x[condition] <- replace[condition] | |
| return(x) | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Currently, the code often includes code like
x[is.na(x)] <- y[is.na(x)]
which is problematic if x any y have a different dimensionality or just a different ordering of the sets or set elements (even if the sets and set elements are identical). This can lead to serious bugs.
The new function replaces this with a safe function, which also integrates conditional statements with lower dimensionality (e.g. conditions over all years or conditions over all regions), as well as replacement with different dimensionality (e.g. partially replacing a country-level dataset with global values).