Skip to content

Commit 35a56f5

Browse files
committed
refactor compare_value_based_on_interval func
1 parent f9f70fa commit 35a56f5

File tree

1 file changed

+30
-40
lines changed

1 file changed

+30
-40
lines changed

R/recode-with-table.R

Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -889,8 +889,8 @@ recode_non_derived_vars <- function(
889889
interval <- default_interval
890890
}
891891

892-
valid_row_index <- compare_value_based_on_interval(
893-
compare_columns = data_varname,
892+
valid_row_index <- check_interval(
893+
column = data_varname,
894894
data = data,
895895
left_boundary = from_values[[1]],
896896
right_boundary = from_values[[2]],
@@ -956,53 +956,43 @@ write_note <- function(note) {
956956
}
957957
}
958958

959-
#' Compare Value Based On Interval
959+
#' Check interval
960960
#'
961-
#' Compare values on the scientific notation interval
961+
#' Checks if the values are inside the scientific-notation interval
962962
#'
963963
#' @param left_boundary the min value
964964
#' @param right_boundary the max value
965-
#' @param data the data that contains values being compared
966-
#' @param compare_columns The columns inside data being checked
967-
#' @param interval The scientific notation interval
965+
#' @param data the data that contains values being checked
966+
#' @param column The column inside data being checked
967+
#' @param interval The scientific notation interval (without values)
968968
#'
969-
#' @return a boolean vector containing true for rows where the
970-
#' comparison is true
969+
#' @return a logical vector with the comparison result
971970
#' @keywords internal
972-
compare_value_based_on_interval <-
973-
function(left_boundary,
974-
right_boundary,
975-
data,
976-
compare_columns,
977-
interval) {
978-
valid_row_index <- vector()
979-
# In case of strings this handles it the suppress warnings is to get rid of the warning when string is checked as numeric
971+
check_interval <-
972+
function(left_boundary, right_boundary, data, column, interval) {
973+
974+
# if the boundary is not a number, then just do a direct intersection
980975
if (suppressWarnings(is.na(as.numeric(left_boundary)))) {
981-
valid_row_index <-
982-
data[[compare_columns]] %in% data[[compare_columns]][which(left_boundary == data[[compare_columns]])]
983-
} else {
984-
if (interval == "[,]") {
985-
valid_row_index <-
986-
data[[compare_columns]] %in% data[[compare_columns]][which(as.numeric(left_boundary) <= as.numeric(data[[compare_columns]]) &
987-
as.numeric(data[[compare_columns]]) <= as.numeric(right_boundary))]
988-
} else if (interval == "[,)") {
989-
valid_row_index <-
990-
data[[compare_columns]] %in% data[[compare_columns]][which(as.numeric(left_boundary) <= as.numeric(data[[compare_columns]]) &
991-
as.numeric(data[[compare_columns]]) < as.numeric(right_boundary))]
992-
} else if (interval == "(,]") {
993-
valid_row_index <-
994-
data[[compare_columns]] %in% data[[compare_columns]][which(as.numeric(left_boundary) < as.numeric(data[[compare_columns]]) &
995-
as.numeric(data[[compare_columns]]) <= as.numeric(right_boundary))]
996-
} else if (interval == "(,)") {
997-
valid_row_index <-
998-
data[[compare_columns]] %in% data[[compare_columns]][which(as.numeric(left_boundary) < as.numeric(data[[compare_columns]]) &
999-
as.numeric(data[[compare_columns]]) < as.numeric(right_boundary))]
1000-
} else {
1001-
stop("Invalid Argument was passed")
1002-
}
976+
return(data[[column]] %in% left_boundary)
1003977
}
1004978

1005-
return(valid_row_index)
979+
v <- as.numeric(data[[column]]) # vector of numeric column values
980+
min <- as.numeric(left_boundary)
981+
max <- as.numeric(right_boundary)
982+
983+
result <- vector()
984+
if (interval == "[,]") {
985+
result <- min <= v & v <= max
986+
} else if (interval == "[,)") {
987+
result <- min <= v & v < max
988+
} else if (interval == "(,]") {
989+
result <- min < v & v <= max
990+
} else if (interval == "(,)") {
991+
result <- min < v & v < max
992+
} else {
993+
stop("Invalid Argument was passed")
994+
}
995+
return(result)
1006996
}
1007997

1008998
# Does the following updates on the passed variable details sheet:

0 commit comments

Comments
 (0)