-
-
Notifications
You must be signed in to change notification settings - Fork 2
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
[Bug] Functional subset for delayed variable_choices
isn't working for tm_g_gh_boxplot
#301
Comments
thanks for writing the acceptance criteria. I'm assuming that with the fix any module would be able to pass a function? tm_g_gh_lineplot also uses the same concept of spliting the lines so that's another test case. |
I added a new acceptance criteria to check solution with other teal.goshawk modules. |
What probably should be done is something similar to the fix in tm_abnormality. |
Hey, in this package, only the Thanks to the collective ideas from @gogonzo and brainstorms with @vedhav I was able to adjust Here is the PR #313 The last question is, if we want to extend this approach to |
PR for |
It's interesting to discover that teal modules need to be written in a specific way to enable the functional subset on delayed data when creating variable_choices. From what I've observed, this is not clearly communicated anywhere in our documentation, especially under the topic of creating custom teal modules. We should make this information more visible in our docs or reassess whether this is the right approach for subsetting delayed data object. |
Yes, I would think we want to extend this to trt_group parameter and any other arguments that accepts choices_selected/variable_choices. |
|
Solution for #301 <details><summary> Working example </summary> ```r pkgload::load_all(".") data <- teal_data_module( ui <- function(id) { ns <- NS(id) actionButton(ns("submit"), "Submit") }, server = function(id) { moduleServer(id, function(input, output, session) { eventReactive(input$submit, { data <- within( teal_data(), { ADLB <- teal.data::rADLB ADSL <- teal.data::rADSL library(dplyr) library(nestcolor) library(stringr) #' # use non-exported function from goshawk h_identify_loq_values <- getFromNamespace("h_identify_loq_values", "goshawk") #' # original ARM value = dose value arm_mapping <- list( "A: Drug X" = "150mg QD", "B: Placebo" = "Placebo", "C: Combination" = "Combination" ) set.seed(1) ADSL <- rADSL ADLB <- rADLB var_labels <- lapply(ADLB, function(x) attributes(x)$label) ADLB <- ADLB %>% mutate( AVISITCD = case_when( AVISIT == "SCREENING" ~ "SCR", AVISIT == "BASELINE" ~ "BL", grepl("WEEK", AVISIT) ~ paste("W", str_extract(AVISIT, "(?<=(WEEK ))[0-9]+")), TRUE ~ as.character(NA) ), AVISITCDN = case_when( AVISITCD == "SCR" ~ -2, AVISITCD == "BL" ~ 0, grepl("W", AVISITCD) ~ as.numeric(gsub("[^0-9]*", "", AVISITCD)), TRUE ~ as.numeric(NA) ), AVISITCD = factor(AVISITCD) %>% reorder(AVISITCDN), TRTORD = case_when( ARMCD == "ARM C" ~ 1, ARMCD == "ARM B" ~ 2, ARMCD == "ARM A" ~ 3 ), ARM = as.character(arm_mapping[match(ARM, names(arm_mapping))]), ARM = factor(ARM) %>% reorder(TRTORD), ACTARM = as.character(arm_mapping[match(ACTARM, names(arm_mapping))]), ACTARM = factor(ACTARM) %>% reorder(TRTORD), ANRLO = 50, ANRHI = 75 ) %>% rowwise() %>% group_by(PARAMCD) %>% mutate(LBSTRESC = ifelse( USUBJID %in% sample(USUBJID, 1, replace = TRUE), paste("<", round(runif(1, min = 25, max = 30))), LBSTRESC )) %>% mutate(LBSTRESC = ifelse( USUBJID %in% sample(USUBJID, 1, replace = TRUE), paste(">", round(runif(1, min = 70, max = 75))), LBSTRESC )) %>% ungroup() #' attr(ADLB[["ARM"]], "label") <- var_labels[["ARM"]] attr(ADLB[["ACTARM"]], "label") <- var_labels[["ACTARM"]] attr(ADLB[["ANRLO"]], "label") <- "Analysis Normal Range Lower Limit" attr(ADLB[["ANRHI"]], "label") <- "Analysis Normal Range Upper Limit" #' # add LLOQ and ULOQ variables ALB_LOQS <- h_identify_loq_values(ADLB, "LOQFL") ADLB <- left_join(ADLB, ALB_LOQS, by = "PARAM") } ) datanames <- c("ADLB", "ADSL") datanames(data) <- datanames join_keys(data) <- default_cdisc_join_keys[datanames] data }) }) } ) # functional subset cs_facet_var <- choices_selected( choices = variable_choices("ADLB", function(data) { na.omit(unique(c("ARM", "AVISITCD", names(data)[26:193]))) }), selected = "AVISITCD" ) app <- init( data = data, modules = modules( tm_g_gh_boxplot( label = "Box Plot", dataname = "ADLB", param_var = "PARAMCD", param = choices_selected(c("ALT", "CRP", "IGA"), "ALT"), yaxis_var = choices_selected(c("AVAL", "BASE", "CHG"), "AVAL"), xaxis_var = choices_selected(c("ACTARM", "ARM", "AVISITCD", "STUDYID"), "ARM"), facet_var = cs_facet_var, trt_group = choices_selected(c("ARM", "ACTARM"), "ARM"), loq_legend = TRUE, rotate_xlab = FALSE, hline_arb = c(60, 55), hline_arb_color = c("grey", "red"), hline_arb_label = c("default_hori_A", "default_hori_B"), hline_vars = c("ANRHI", "ANRLO", "ULOQN", "LLOQN"), hline_vars_colors = c("pink", "brown", "purple", "black"), ) ), title = "my teal app" ) shinyApp(app$ui, app$server) ``` </details> --------- Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Possible extension of #313 for #301 --------- Signed-off-by: Marcin <[email protected]>
Hey @donyunardi for |
I agree. Also, I don't think we need I'll create a separate issue. Closing this issue as this has been completed. |
Summary
Per documentation, when operating with delayed data, user can create delayed
variable_choices
using functional subset technique:https://github.com/insightsengineering/teal.transform/blob/016799c641e9079a4893a95d825d803cd82f6dda/R/choices_labeled.R#L168-L172
However, this doesn't seem to be working with
tm_g_gh_boxplot
.During initial investigation, the issue is because the delayed
variable_choices
was not resolved when executing teal.widgets::optionalSelectInput:teal.goshawk/R/tm_g_gh_boxplot.R
Lines 311 to 317 in 4917554
https://github.com/insightsengineering/teal.widgets/blob/2f43fb5fb5bab6974cae4ccc63501c7f74bbd5cf/R/optionalInput.R#L86-L91
We need investigate further on why the functional subset is not being resolved.
https://github.com/insightsengineering/teal.transform/blob/a0db9fc819a36f9d181d8829f16af81a3c41d721/R/choices_labeled.R#L204-L206
It could also be related with
teal.goshawk::get_choices
function.Example Code
Acceptance Criteria
variable_choices
/choices_selected
when usingtm_g_gh_boxplot
teal.goshawk
modules.The text was updated successfully, but these errors were encountered: