-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
getting linked table subsets function exported
- Loading branch information
Showing
7 changed files
with
162 additions
and
18 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
#' Retrieve Linked Data Between RDBES Tables at a Specified Level | ||
#' | ||
#' The `getLinkedDataFromLevel` function facilitates the retrieval of linked data between different levels of RDBES tables. Depending on the relative positions of the source and target tables within the `RDBESDataObject`, the function determines whether to traverse "up" or "down" the data hierarchy to obtain the desired linked data. | ||
#' | ||
#' @param field A character string specifying the field name from which to retrieve linked data. The first two characters of this field indicate the source table. | ||
#' @param values A vector of values corresponding to the specified `field` for which linked data is to be retrieved. | ||
#' @param rdbesTables An `RDBESDataObject` containing the relevant RDBES tables. This object should include all tables that may be linked based on the provided `field` and `level`. | ||
#' @param level A character string specifying the target table level from which to retrieve linked data. This must be one of the names within the `rdbesTables` object. | ||
#' @param verbose Logical flag indicating whether to print detailed information about the data retrieval process. Default is `FALSE`. | ||
#' | ||
#' @return The subset of the table at the specified `level`. | ||
#' | ||
#' @examples | ||
#' \dontrun{ | ||
#' # Example 1: Going up in the table hierarchy to retrieve data from the DE table | ||
#' # Retrieve data from the DE level based on BVid from the BV table | ||
#' # This returns 1 row from the DE table | ||
#' getLinkedDataFromLevel("BVid", c(1), H8ExampleEE1, "DE", TRUE) | ||
#' | ||
#' # Example 2: Going down in the table hierarchy to retrieve data from the SA table | ||
#' # Retrieve data from the SA level based on DEid from the DE table | ||
#' # This returns 15 rows from the SA table | ||
#' getLinkedDataFromLevel("DEid", c(1), H8ExampleEE1, "SA", TRUE) | ||
#' | ||
#' # Example 3: Going up in the table hierarchy to see the Vessel that caught a specific fish | ||
#' # Retrieve data from the VS level based on BVfishId from the BV table | ||
#' getLinkedDataFromLevel("BVfishId", c("410472143", "410472144"), H8ExampleEE1, "VS", TRUE) | ||
#' } | ||
#' @export | ||
getLinkedDataFromLevel <- function(field, values, rdbesTables, level, verbose = FALSE){ | ||
|
||
# Check if rdbesTables is of class "RDBESDataObject" | ||
if(inherits(rdbesTables, "RDBESDataObject")) { | ||
rdbesTables <- sort(rdbesTables) | ||
} else { | ||
stop("rdbesTables must be of class RDBESDataObject") | ||
} | ||
|
||
# Check if the specified level exists within rdbesTables | ||
if(!level %in% names(rdbesTables)){ | ||
stop("Table ", level, " not found in the RDBESDataObject") | ||
} | ||
|
||
# Extract the source table abbreviation from the field name | ||
sourceTbl <- substr(field, 1, 2) | ||
|
||
# Get the list of table names | ||
tblNames <- names(rdbesTables) | ||
|
||
# Determine the positions of sourceTbl and target level in the table list | ||
sourcePos <- which(tblNames == sourceTbl) | ||
targetPos <- which(tblNames == level) | ||
|
||
# Determine traversal direction based on table positions | ||
res <- NULL | ||
if(sourcePos > targetPos){ | ||
if(verbose){ | ||
cat("Traversing upwards in the table hierarchy from", sourceTbl, "to", level, "\n") | ||
} | ||
res <- upperTblData(field, values, rdbesTables, level, verbose) | ||
} else { | ||
if(verbose){ | ||
cat("Traversing downwards in the table hierarchy from", sourceTbl, "to", level, "\n") | ||
} | ||
res <- lowerTblData(field, values, rdbesTables, level, verbose) | ||
} | ||
|
||
return(res) | ||
} |
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
|
||
# Test for Example 1: Going up in the table hierarchy to retrieve data from the DE table | ||
test_that("Retrieve data from DE based on BVid", { | ||
result <- getLinkedDataFromLevel("BVid", c(1), H8ExampleEE1, "DE") | ||
|
||
# Check that the result is a data.table (or other expected data structure) | ||
expect_s3_class(result, "data.table") | ||
|
||
# Check that the result has 1 row, as expected | ||
expect_equal(nrow(result), 1) | ||
|
||
}) | ||
|
||
# Test for Example 2: Going down in the table hierarchy to retrieve data from the SA table | ||
test_that("Retrieve data from SA based on DEid", { | ||
result <- getLinkedDataFromLevel("DEid", c(1), H8ExampleEE1, "SA") | ||
|
||
# Check that the result is a data.table (or other expected data structure) | ||
expect_s3_class(result, "data.table") | ||
|
||
# Check that the result has 15 rows, as expected | ||
expect_equal(nrow(result), 15) | ||
|
||
}) | ||
|
||
# Test for Example 3: Going up in the table hierarchy to retrieve data from the VS table based on BVfishId | ||
test_that("Retrieve data from VS based on BVfishId", { | ||
result <- getLinkedDataFromLevel("BVfishId", c("410472143", "410472144"), H8ExampleEE1, "VS") | ||
|
||
# Check that the result is a data.table (or other expected data structure) | ||
expect_s3_class(result, "data.table") | ||
|
||
# Check that the result contains data (you can adjust this depending on known expected results) | ||
expect_equal(nrow(result), 1) | ||
|
||
# Optionally, check for specific values in the result | ||
|
||
}) | ||
|
||
test_that("Error when rdbesTables is not of class RDBESDataObject", { | ||
# Pass an invalid class (e.g., a list) instead of RDBESDataObject | ||
invalid_rdbesTables <- list() | ||
|
||
# Expect the function to throw an error | ||
expect_error( | ||
getLinkedDataFromLevel("BVid", c(1), invalid_rdbesTables, "DE"), | ||
"rdbesTables must be of class RDBESDataObject" | ||
) | ||
}) | ||
|
||
test_that("Error when level is not found in rdbesTables", { | ||
# Assume H8ExampleEE1 is a valid RDBESDataObject, but "XX" is not a valid level | ||
expect_error( | ||
getLinkedDataFromLevel("BVid", c(1), H8ExampleEE1, "XX"), | ||
"Table XX not found in the RDBESDataObject" | ||
) | ||
}) | ||
|
||
|
||
|
||
|
||
|
||
|
This file contains 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
This file contains 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