-
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
exporting redcap instrument from shiny app
- Loading branch information
Showing
5 changed files
with
182 additions
and
54 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
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,121 @@ | ||
#' Creates zip-file with necessary content to manually add instrument to database | ||
#' | ||
#' @description | ||
#' Metadata can be added by editing the data dictionary of a project in the | ||
#' initial design phase. If you want to later add new instruments, this | ||
#' function can be used to create (an) instrument(s) to add to a project in | ||
#' production. | ||
#' | ||
#' @param data metadata for the relevant instrument. | ||
#' Could be from `ds2dd_detailed()` | ||
#' @param dir destination dir for the instrument zip. Default is the current WD. | ||
#' @param record.id record id variable name. Default is 'record_id'. | ||
#' | ||
#' @return exports zip-file | ||
#' | ||
#' @examples | ||
#' iris |> | ||
#' ds2dd_detailed( | ||
#' add.auto.id = TRUE, | ||
#' form.name = sample(c("b", "c"), size = 6, replace = TRUE, prob = rep(.5, 2)) | ||
#' ) |> | ||
#' purrr::pluck("meta") |> | ||
#' (\(.x){ | ||
#' split(.x, .x$form_name) | ||
#' })() |> | ||
#' purrr::imap(function(.x, .i){ | ||
#' export_redcap_instrument(.x,file=here::here(paste0(.i,Sys.Date(),".zip"))) | ||
#' }) | ||
#' | ||
#' iris |> | ||
#' ds2dd_detailed( | ||
#' add.auto.id = TRUE | ||
#' ) |> | ||
#' purrr::pluck("meta") |> | ||
#' export_redcap_instrument(file=here::here(paste0("instrument",Sys.Date(),".zip"))) | ||
export_redcap_instrument <- function(data, | ||
file, | ||
force=FALSE, | ||
record.id = "record_id") { | ||
# Ensure form name is the same | ||
if (force){ | ||
data$form_name <- data$form_name[1] | ||
} else if (length(unique(data$form_name))!=1){ | ||
stop("Please provide metadata for a single form only. See examples for | ||
ideas on exporting multiple instruments.") | ||
} | ||
|
||
if (record.id %in% data[["field_name"]]){ | ||
data <- data[-match(record.id,data[["field_name"]]),] | ||
} | ||
|
||
temp_dir <- tempdir() | ||
utils::write.csv(data, paste0(temp_dir, "/instrument.csv"), row.names = FALSE, na = "") | ||
writeLines("REDCapCAST", paste0(temp_dir, "/origin.txt")) | ||
zip::zip( | ||
zipfile = file, | ||
files = c("origin.txt", "instrument.csv"), | ||
root = temp_dir | ||
) | ||
} | ||
|
||
|
||
#' DEPRICATED Create zips file with necessary content based on data set | ||
#' | ||
#' @description | ||
#' Metadata can be added by editing the data dictionary of a project in the | ||
#' initial design phase. If you want to later add new instruments, this | ||
#' function can be used to create (an) instrument(s) to add to a project in | ||
#' production. | ||
#' | ||
#' @param data metadata for the relevant instrument. | ||
#' Could be from `ds2dd_detailed()` | ||
#' @param dir destination dir for the instrument zip. Default is the current WD. | ||
#' @param record.id flag to omit the first row of the data dictionary assuming | ||
#' this is the record_id field which should not be included in the instrument. | ||
#' Default is TRUE. | ||
#' | ||
#' @return list | ||
#' @export | ||
#' | ||
#' @examples | ||
#' data <- iris |> | ||
#' ds2dd_detailed( | ||
#' add.auto.id = TRUE, | ||
#' form.name = sample(c("b", "c"), | ||
#' size = 6, | ||
#' replace = TRUE, prob = rep(.5, 2) | ||
#' ) | ||
#' ) |> | ||
#' purrr::pluck("meta") | ||
#' # data |> create_instrument_meta() | ||
#' | ||
#' data <- iris |> | ||
#' ds2dd_detailed(add.auto.id = FALSE) |> | ||
#' purrr::pluck("data") | ||
#' iris |> | ||
#' setNames(glue::glue("{sample(x = c('a','b'),size = length(ncol(iris)), | ||
#' replace=TRUE,prob = rep(x=.5,2))}__{names(iris)}")) |> | ||
#' ds2dd_detailed(form.sep = "__") | ||
#' # data |> | ||
#' # purrr::pluck("meta") |> | ||
#' # create_instrument_meta(record.id = FALSE) | ||
create_instrument_meta <- function(data, | ||
dir = here::here(""), | ||
record.id = TRUE) { | ||
# browser() | ||
if (record.id) { | ||
data <- data[-1, ] | ||
} | ||
temp_dir <- tempdir() | ||
split(data, data$form_name) |> purrr::imap(function(.x, .i) { | ||
utils::write.csv(.x, paste0(temp_dir, "/instrument.csv"), | ||
row.names = FALSE, na = "" | ||
) | ||
writeLines("REDCapCAST", paste0(temp_dir, "/origin.txt")) | ||
zip::zip(paste0(dir, "/", .i, Sys.Date(), ".zip"), | ||
files = c("origin.txt", "instrument.csv"), | ||
root = temp_dir | ||
) | ||
}) | ||
} |
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
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.