diff --git a/R/plotting.R b/R/plotting.R index 5d0eb901f5e3cdab0ca6fe5564def7ffd276bdaf..b86898fcb8b854f46391b32ce33bd61b4f8be3eb 100644 --- a/R/plotting.R +++ b/R/plotting.R @@ -380,6 +380,9 @@ scale_y<- function (axis="linear", ...) if (axis!="log") { ggplot2::scale_y_log10(...) } + +## Concatenates items of a named list in a chain of &-s: x==xval & +## y=yval & z=zval ...) mk_logic_exp <- function(rest,sofar=NULL) { if (length(rest)==0L) { return(sofar) @@ -392,6 +395,7 @@ mk_logic_exp <- function(rest,sofar=NULL) { } } + get_data_from_key <- function(tab,key) { skey <- mk_logic_exp(key) eval(bquote(tab[.(skey)])) @@ -408,15 +412,27 @@ make_line_label <- function(...) { paste(...,sep="; ") } -## Prepare MS1 eic data: rt and intensity + key made of splitby. +## Prepare MS1 eic data: rt and intensity of a subset of extracted +## data defined by the key named list. get_data_4_eic_ms1 <- function(extr_ms1,key) { + + ## Which of the selected keys are in the extr_ms1? This can be + ## made more obvious to the user, but not necessary atm. actual_key <- key[intersect(names(key),names(extr_ms1))] + + ## Which of CINDEX categories exist among extr_ms1 categories? label_group <- intersect(get_label_group(names(key)),names(extr_ms1)) + + ## Subset extr_ms1 by the actual key. tab <-get_data_from_key(tab=extr_ms1,key=actual_key) + + ## Group the plot data per label group (ie tags, or adducts, or + ## both). label_group <- as.list(label_group) names(label_group) <- NULL pdata <- tab[,.(rt,intensity),by=label_group] + ## Create labels. pdata <- eval(bquote(pdata[,label:=make_line_label(..(lapply(label_group,as.symbol))),by=(label_group)],splice=T)) setkeyv(pdata,cols=unique(c("ID",as.character(label_group),"rt"))) pdata diff --git a/R/shiny-ui-base.R b/R/shiny-ui-base.R index f0d5655dc7f2ab8901e9f02cda841b35d43f8d4f..c491a2095de343b19ca16d4d530e8827f57403dc 100644 --- a/R/shiny-ui-base.R +++ b/R/shiny-ui-base.R @@ -740,13 +740,16 @@ mk_shinyscreen_server <- function(projects,init) { req(NROW(cind)>0L) row <- input$cindex_row_last_clicked req(row) + snms <- names(cind) sel <- cind[row] - - - make_eic_ms1_plot(ms1,summ,set=sel$set, - adduct=sel$adduct, - id=sel$ID, - splitby=c("tag")) + wh <- which(snms %in% CINDEX_BY) + req(wh) + sel2 <- lapply(wh,function(n) sel[[n]][[1]]) + names(sel2) <- snms[wh] + message('sel2:') + print(sel2) + message('---') + make_eic_ms1_plot(ms1,summ,key=sel2)