Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DO NOT MERGE, JUST TESTING 51 v2 #57

Closed
wants to merge 26 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0300e23
New function to derive oak_id_vars. More work needed.
rammprasad May 15, 2024
b99fb5d
cm template updates. In progress.
rammprasad May 15, 2024
0d56384
almost completed cm template
rammprasad May 21, 2024
8dfa57f
Basic support for "conditioned" data frames
ramiromagno May 24, 2024
d08794b
Basic support for conditioned data sets
ramiromagno May 26, 2024
00e758a
Extensive support for conditioned tibbles
ramiromagno May 29, 2024
783f653
Merge branch '0054-condition-by' into 51-documentation-updates-v01 to…
rammprasad Jun 11, 2024
0d7861a
Ramm's feedback integration
ramiromagno Jun 12, 2024
eea1580
A fix to derive study day
rammprasad Jun 12, 2024
1b4c849
Algorithms Vignette update
rammprasad Jun 12, 2024
9b5d9b4
cm template code update
rammprasad Jun 12, 2024
8330232
Merge branch '0054-condition-by' into FB to help with programming
rammprasad Jun 12, 2024
99ea428
A function to help display of dataset in Vignette
rammprasad Jun 14, 2024
128d4dc
Template update
rammprasad Jun 14, 2024
754d6c7
Raw data change
rammprasad Jun 14, 2024
c847935
DM domain csv
rammprasad Jun 14, 2024
503c145
Events domain article
rammprasad Jun 14, 2024
2b134f6
update controlled terminology
rammprasad Jun 15, 2024
6266fe0
Updated CM template
rammprasad Jun 15, 2024
7ae3275
VS domain template and Vignette
rammprasad Jun 15, 2024
48ed544
CM domain Vignette update
rammprasad Jun 15, 2024
0c4b00d
just testing
edgar-manukyan Jun 17, 2024
8a1ddfd
testing
edgar-manukyan Jun 17, 2024
dee4f86
resolve confs
edgar-manukyan Jun 17, 2024
6da571f
Automatic renv profile update.
edgar-manukyan Jun 17, 2024
10a7f99
Automatic renv profile update.
edgar-manukyan Jun 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ Imports:
tibble,
vctrs,
readr,
glue
glue,
pillar
Suggests:
knitr,
rmarkdown,
Expand Down
11 changes: 11 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
@@ -1,23 +1,34 @@
# Generated by roxygen2: do not edit by hand

S3method(ctl_new_rowid_pillar,cnd_df)
S3method(mutate,cnd_df)
S3method(print,iso8601)
S3method(tbl_sum,cnd_df)
export(assign_ct)
export(assign_datetime)
export(assign_no_ct)
export(clear_cache)
export(condition_add)
export(create_iso8601)
export(ct_map)
export(ct_spec_example)
export(ct_spec_vars)
export(dataset_oak_vignette)
export(derive_seq)
export(derive_study_day)
export(domain_example)
export(fmt_cmp)
export(generate_oak_id_vars)
export(hardcode_ct)
export(hardcode_no_ct)
export(oak_id_vars)
export(problems)
export(read_ct_spec)
export(read_ct_spec_example)
export(rm_cnd_df)
importFrom(dplyr,mutate)
importFrom(pillar,ctl_new_rowid_pillar)
importFrom(pillar,tbl_sum)
export(read_domain_example)
export(sbj_vars)
importFrom(rlang,"%||%")
Expand Down
16 changes: 16 additions & 0 deletions R/assertions.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Surprisingly, admiraldev doesn't provide `assert_logical_vector`.
assert_logical_vector <- function(arg, optional = FALSE) {
if (optional && is.null(arg)) {
return(invisible(arg))
}

if (!is.logical(arg)) {
err_msg <- sprintf(
"`arg` must be a logical vector but is %s.",
admiraldev::what_is_it(arg)
)
rlang::abort(err_msg)
}

invisible(arg)
}
71 changes: 32 additions & 39 deletions R/assign.R
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#' the variables indicated in `id_vars`. This parameter is optional, see
#' section Value for how the output changes depending on this argument value.
#' @param id_vars Key variables to be used in the join between the raw dataset
#' (`raw_dat`) and the target data set (`raw_dat`).
#' (`raw_dat`) and the target data set (`tgt_dat`).
#'
#' @returns The returned data set depends on the value of `tgt_dat`:
#' - If no target dataset is supplied, meaning that `tgt_dat` defaults to
Expand All @@ -35,13 +35,14 @@
#'
#' @importFrom rlang :=
#' @keywords internal
sdtm_assign <- function(raw_dat,
raw_var,
sdtm_assign <- function(tgt_dat = NULL,
tgt_var,
raw_dat,
raw_var,
ct_spec = NULL,
ct_clst = NULL,
tgt_dat = NULL,
id_vars = oak_id_vars()) {

admiraldev::assert_character_scalar(raw_var)
admiraldev::assert_character_scalar(tgt_var)
admiraldev::assert_character_vector(id_vars)
Expand All @@ -53,29 +54,19 @@ sdtm_assign <- function(raw_dat,
assert_ct_spec(ct_spec, optional = TRUE)
assert_ct_clst(ct_spec = ct_spec, ct_clst = ct_clst, optional = TRUE)

# Recode the raw variable following terminology.
tgt_val <- ct_map(raw_dat[[raw_var]], ct_spec = ct_spec, ct_clst = ct_clst)

# Apply derivation by assigning `raw_var` to `tgt_var`.
# `der_dat`: derived dataset.
der_dat <-
join_dat <-
raw_dat |>
dplyr::select(c(id_vars, raw_var)) |>
dplyr::mutate("{tgt_var}" := tgt_val) |> # nolint object_name_linter()
dplyr::select(-rlang::sym(raw_var))
dplyr::select(dplyr::all_of(c(id_vars, raw_var))) |>
sdtm_join(tgt_dat = tgt_dat, id_vars = id_vars)

# Recode the raw variable following terminology.
tgt_val <- ct_map(join_dat[[raw_var]], ct_spec = ct_spec, ct_clst = ct_clst)

# If a target dataset is supplied, then join the so far derived dataset with
# the target dataset (`tgt_dat`), otherwise leave it be.
der_dat <-
if (!is.null(tgt_dat)) {
der_dat |>
dplyr::right_join(y = tgt_dat, by = id_vars) |>
dplyr::relocate(tgt_var, .after = dplyr::last_col())
} else {
der_dat
}
join_dat |>
mutate("{tgt_var}" := tgt_val) |> # nolint object_name_linter()
dplyr::select(-dplyr::any_of(setdiff(raw_var, tgt_var))) |>
dplyr::relocate(dplyr::all_of(tgt_var), .after = dplyr::last_col())

der_dat
}

#' Derive an SDTM variable
Expand Down Expand Up @@ -127,9 +118,9 @@ sdtm_assign <- function(raw_dat,
#' )
#'
#' assign_no_ct(
#' raw_dat = md1,
#' raw_var = "MDIND",
#' tgt_var = "CMINDC",
#' raw_dat = md1,
#' raw_var = "MDIND"
#' )
#'
#' cm_inter <-
Expand Down Expand Up @@ -175,12 +166,12 @@ sdtm_assign <- function(raw_dat,
#' (ct_spec <- read_ct_spec_example("ct-01-cm"))
#'
#' assign_ct(
#' tgt_dat = cm_inter,
#' tgt_var = "CMINDC",
#' raw_dat = md1,
#' raw_var = "MDIND",
#' tgt_var = "CMINDC",
#' ct_spec = ct_spec,
#' ct_clst = "C66729",
#' tgt_dat = cm_inter
#' ct_clst = "C66729"
#' )
#'
#' @name assign
Expand All @@ -189,11 +180,12 @@ NULL
#' @order 1
#' @export
#' @rdname assign
assign_no_ct <- function(raw_dat,
raw_var,
assign_no_ct <- function(tgt_dat = NULL,
tgt_var,
tgt_dat = NULL,
raw_dat,
raw_var,
id_vars = oak_id_vars()) {

admiraldev::assert_character_scalar(raw_var)
admiraldev::assert_character_scalar(tgt_var)
admiraldev::assert_character_vector(id_vars)
Expand All @@ -204,24 +196,25 @@ assign_no_ct <- function(raw_dat,
admiraldev::assert_data_frame(tgt_dat, required_vars = rlang::syms(id_vars), optional = TRUE)

sdtm_assign(
tgt_dat = tgt_dat,
tgt_var = tgt_var,
raw_dat = raw_dat,
raw_var = raw_var,
tgt_var = tgt_var,
tgt_dat = tgt_dat,
id_vars = id_vars
)
}

#' @order 2
#' @export
#' @rdname assign
assign_ct <- function(raw_dat,
raw_var,
assign_ct <- function(tgt_dat = NULL,
tgt_var,
raw_dat,
raw_var,
ct_spec,
ct_clst,
tgt_dat = NULL,
id_vars = oak_id_vars()) {

admiraldev::assert_character_scalar(raw_var)
admiraldev::assert_character_scalar(tgt_var)
admiraldev::assert_character_vector(id_vars)
Expand All @@ -232,10 +225,10 @@ assign_ct <- function(raw_dat,
admiraldev::assert_data_frame(tgt_dat, required_vars = rlang::syms(id_vars), optional = TRUE)

sdtm_assign(
tgt_dat = tgt_dat,
tgt_var = tgt_var,
raw_dat = raw_dat,
raw_var = raw_var,
tgt_var = tgt_var,
tgt_dat = tgt_dat,
id_vars = id_vars,
ct_spec = ct_spec,
ct_clst = ct_clst
Expand Down
54 changes: 24 additions & 30 deletions R/assign_datetime.R
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,11 @@
#' # indicating that these values are missing/unknown (unk).
#' cm1 <-
#' assign_datetime(
#' tgt_var = "CMSTDTC",
#' raw_dat = md1,
#' raw_var = "MDBDR",
#' raw_fmt = "d-m-y",
#' raw_unk = c("UN", "UNK"),
#' tgt_var = "CMSTDTC"
#' raw_unk = c("UN", "UNK")
#' )
#'
#' cm1
Expand Down Expand Up @@ -120,11 +120,11 @@
#' # data set `cm_inter`.
#' cm2 <-
#' assign_datetime(
#' tgt_dat = cm_inter,
#' tgt_var = "CMSTDTC",
#' raw_dat = md1,
#' raw_var = "MDBDR",
#' raw_fmt = "d-m-y",
#' tgt_var = "CMSTDTC",
#' tgt_dat = cm_inter
#' raw_fmt = "d-m-y"
#' )
#'
#' cm2
Expand All @@ -137,11 +137,11 @@
#' # MDETM (correspondence is by positional matching).
#' cm3 <-
#' assign_datetime(
#' tgt_var = "CMSTDTC",
#' raw_dat = md1,
#' raw_var = c("MDEDR", "MDETM"),
#' raw_fmt = c("d-m-y", "H:M:S"),
#' raw_unk = c("UN", "UNK"),
#' tgt_var = "CMSTDTC"
#' raw_unk = c("UN", "UNK")
#' )
#'
#' cm3
Expand All @@ -151,14 +151,15 @@
#'
#' @export
assign_datetime <-
function(raw_dat,
function(tgt_dat = NULL,
tgt_var,
raw_dat,
raw_var,
raw_fmt,
tgt_var,
raw_unk = c("UN", "UNK"),
tgt_dat = NULL,
id_vars = oak_id_vars(),
.warn = TRUE) {

admiraldev::assert_character_vector(raw_var)
admiraldev::assert_character_scalar(tgt_var)
admiraldev::assert_character_vector(id_vars)
Expand All @@ -170,27 +171,20 @@ assign_datetime <-
admiraldev::assert_character_vector(raw_unk)
admiraldev::assert_logical_scalar(.warn)

tgt_val <-
create_iso8601(!!!raw_dat[raw_var],
.format = raw_fmt,
.na = raw_unk,
.warn = .warn
)

der_dat <-
join_dat <-
raw_dat |>
dplyr::select(c(id_vars, raw_var)) |>
dplyr::mutate("{tgt_var}" := tgt_val) |> # nolint object_name_linter()
dplyr::select(-raw_var)
dplyr::select(dplyr::all_of(c(id_vars, raw_var))) |>
sdtm_join(tgt_dat = tgt_dat, id_vars = id_vars)

der_dat <-
if (!is.null(tgt_dat)) {
der_dat |>
dplyr::right_join(y = tgt_dat, by = id_vars) |>
dplyr::relocate(tgt_var, .after = dplyr::last_col())
} else {
der_dat
}
tgt_val <-
create_iso8601(!!!join_dat[raw_var],
.format = raw_fmt,
.na = raw_unk,
.warn = .warn
)

der_dat
join_dat |>
mutate("{tgt_var}" := tgt_val) |> # nolint object_name_linter()
dplyr::select(-dplyr::any_of(setdiff(raw_var, tgt_var))) |>
dplyr::relocate(dplyr::all_of(tgt_var), .after = dplyr::last_col())
}
Loading