generics field has been removed and is now handled with simpel internal helper function is.repeated_longitudinal()

This commit is contained in:
Andreas Gammelgaard Damsbo 2024-02-06 08:43:24 +01:00
parent 7c211250d8
commit 0ce516c297
2 changed files with 52 additions and 41 deletions

View File

@ -31,20 +31,12 @@ read_redcap_tables <- function(uri,
events = NULL,
forms = NULL,
raw_or_label = "label",
split_forms = "all",
generics = c(
"redcap_event_name",
"redcap_repeat_instrument",
"redcap_repeat_instance"
)) {
split_forms = "all") {
# Getting metadata
m <-
REDCapR::redcap_metadata_read(redcap_uri = uri, token = token)[["data"]]
if (!is.null(fields)) {
fields_test <- fields %in% unique(m$field_name)
if (any(!fields_test)) {
@ -55,7 +47,6 @@ read_redcap_tables <- function(uri,
if (!is.null(forms)) {
forms_test <- forms %in% unique(m$form_name)
if (any(!forms_test)) {
@ -65,8 +56,10 @@ read_redcap_tables <- function(uri,
}
if (!is.null(events)) {
arm_event_inst <- REDCapR::redcap_event_instruments(redcap_uri = uri,
token = token)
arm_event_inst <- REDCapR::redcap_event_instruments(
redcap_uri = uri,
token = token
)
event_test <- events %in% unique(arm_event_inst$data$unique_event_name)
@ -95,28 +88,19 @@ read_redcap_tables <- function(uri,
}
# Processing metadata to reflect focused dataset
if (!is.null(c(fields,forms,events))){
m <- focused_metadata(m, names(d))
}
if (any(generics %in% names(d))){
# Splitting
l <- REDCap_split(d,
m,
forms = split_forms,
primary_table_name = "")
primary_table_name = ""
)
# Sanitizing split list by removing completely empty rows apart from colnames
# in "generics"
sanitize_split(l, c(names(d)[1], generics))
} else {
# If none of generics are present, the data base is not longitudinal,
# and does not have repeatable events, and therefore splitting does not
# make sense. But now we handle that as well.
d
}
}

View File

@ -416,3 +416,30 @@ d2w <- function(x, lang = "en", neutrum=FALSE, everything=FALSE) {
out
}
#' Test if repeatable or longitudinal
#'
#' @param data data set
#' @param generics default is "redcap_event_name", "redcap_repeat_instrument"
#' and "redcap_repeat_instance"
#'
#' @return logical
#' @examples
#' is.repeated_longitudinal(c("record_id", "age", "record_id", "gender"))
#'
is.repeated_longitudinal <- function(data, generics = c(
"redcap_event_name",
"redcap_repeat_instrument",
"redcap_repeat_instance"
)) {
if (is.list(data)) {
names <- data |>
lapply(names) |>
purrr::list_c()
} else if (is.data.frame(data)) {
names <- names(data)
} else if (is.vector(data)) {
names <- data
}
any(generics %in% names)
}