Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
20839a2
updt contributors
mitraak Mar 2, 2026
c4fb249
updt DESCRIPTION
mitraak Mar 2, 2026
b187603
tweak function help
mitraak Mar 2, 2026
bd0aea7
show currently loaded project name
mitraak Mar 2, 2026
d94f525
check for design slot before assignment
mitraak Mar 2, 2026
db1d34b
rm server stuff frm README
mitraak Mar 2, 2026
9fb6fc4
handle parent path of saved RDS being present in data areas
mitraak Mar 2, 2026
ddaeda6
add styling for card
mitraak Mar 3, 2026
a25bda4
add support for edgeR & limma
mitraak Mar 3, 2026
167f076
pin R < 4.3.0
mitraak Mar 3, 2026
3f7ae4d
add bioconductor shields
mitraak Mar 3, 2026
9419c95
mv loaded data card
mitraak Mar 5, 2026
cfd99b3
fix typo
mitraak Mar 5, 2026
4b55ea9
rm design slot before saving
mitraak Mar 5, 2026
cc549a6
add/fix logic fr checking pre-existing paths
mitraak Mar 5, 2026
1d2d905
add comment
mitraak Mar 5, 2026
1e9e753
rm comment
mitraak Mar 5, 2026
0791b87
add degpatterns obj via ui
mitraak Mar 5, 2026
3455dc2
add degpatterns obj validator
mitraak Mar 5, 2026
762b76f
keep orphan dds obj
mitraak Mar 5, 2026
4ef27f1
updt NAMESPACE
mitraak Mar 5, 2026
d7eda21
fix typo
mitraak Mar 5, 2026
7f9f487
always show tbl
mitraak Mar 6, 2026
3fb3b9e
split static/interactive plt outputs; switch frm renderUI to cond panel
mitraak Mar 6, 2026
0a04649
make scattergl by default
mitraak Mar 6, 2026
141e44d
make legend entries larger
mitraak Mar 6, 2026
2541798
add sig column to scatter tbl
mitraak Mar 6, 2026
6da9ff6
mv scatter tbl to observer
mitraak Mar 6, 2026
63e9518
add scatter tbl filters
mitraak Mar 6, 2026
0746a31
add scatter tbl selection
mitraak Mar 6, 2026
12bb379
integrate tbl sel w gene scratchpad & global reset genes
mitraak Mar 6, 2026
d11ff5d
updt plt w gene scratchpad
mitraak Mar 6, 2026
f14b57f
updt scatter plt docs
mitraak Mar 6, 2026
c49bafb
inc scatter plt legend char size
mitraak Mar 6, 2026
20c7346
renderdt reacts to scatter_dt
mitraak Mar 7, 2026
ed5987a
add src arg to scatter plotly plt
mitraak Mar 7, 2026
14482ba
add plotly imports
mitraak Mar 7, 2026
bf2cbaf
set default selection type to box
mitraak Mar 10, 2026
c7d276d
minor ws
mitraak Mar 10, 2026
92becfc
add tbl & plt selection fr scatter
mitraak Mar 10, 2026
1471e28
add plotly imports to NAMESPACE
mitraak Mar 10, 2026
f33543a
tweak button label
mitraak Mar 17, 2026
b96618a
add DESeq2 column names
mitraak Mar 17, 2026
5957e1c
add bioc badges, devel page
mitraak Mar 18, 2026
93a1bfa
add biocmanager install, conda install note
mitraak Mar 18, 2026
f10cbda
change github actions github install branch
mitraak Mar 18, 2026
ecb3a0f
updt imports, NAMESPACE
mitraak Mar 18, 2026
d33cad9
use reactive to hold scatter plt src
mitraak Mar 18, 2026
fc3342d
updt scatter plt test w new params
mitraak Mar 18, 2026
f1165d0
minor formatting
mitraak Mar 18, 2026
4419067
pin R < 4.6 for bioc
mitraak Mar 18, 2026
627832f
version bump
mitraak Mar 18, 2026
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
2 changes: 1 addition & 1 deletion .github/workflows/conda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ jobs:
source "${HOME}/conda/etc/profile.d/conda.sh"
conda activate ../env

Rscript -e "setRepositories(ind=1:5); remotes::install_github('NICHD-BSPC/carnation', upgrade='never')"
Rscript -e "setRepositories(ind=1:5); remotes::install_github('NICHD-BSPC/carnation@r4.3', upgrade='never')"
Rscript -e "library(carnation)"


Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pkgdown.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
source "${HOME}/conda/etc/profile.d/conda.sh"
conda activate ../env

Rscript -e "setRepositories(ind=1:5); remotes::install_github('NICHD-BSPC/carnation', upgrade='never')"
Rscript -e "setRepositories(ind=1:5); remotes::install_github('NICHD-BSPC/carnation@r4.3', upgrade='never')"
Rscript -e "pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)"

- name: Deploy to GitHub pages 🚀
Expand Down
18 changes: 11 additions & 7 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
Package: carnation
Title: Shiny App to Explore RNA-Seq Analysis
Version: 0.99.8
Title: Interactive Exploration & Management of RNA-Seq Analyses
Version: 0.99.9
Authors@R:
c(
person("Apratim", "Mitra", , "apratim.mitra@nih.gov",
role = c("aut", "cre"), comment = c(ORCID = "0000-0003-3279-0054")),
person(c("Matthew", "Tyler"), "Menold", , "matthew.menold@gmail.com",
role = c("ctb"), comment = c(ORCID = "0009-0007-4728-2470")),
person("Ryan", "Dale", , "ryan.dale@nih.gov",
role = c("fnd"), comment = c(ORCID = "0000-0003-2664-3744"))
)
Description: Interactive Shiny dashboard app that can be used to
explore RNA-Seq analysis results including differential expression (DE),
Description: This package provides a highly interactive & modular shiny app to
explore three facets of RNA-Seq analysis: differential expression (DE),
functional enrichment and pattern analysis. Several visualizations
are implemented to provide a wide-ranging view of data sets. For
DE analysis, we provide PCA plot, MA plot, Upset plot & heatmaps,
in addition to a highly customizable gene plot. Seven different
visualizations are available for functional enrichment analysis,
and we also support gene pattern analysis. In addition, the app
provides a platform to manage multiple projects and user groups
that can be run on a central server.
and we also support gene pattern analysis. Genes of interest can
be tracked across all modules using the gene scratchpad. In addition,
carnation provides an integrated platform to manage multiple projects
and user access that can be run on a central server to share with
collaborators.
License: MIT + file LICENSE
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
Expand Down
5 changes: 5 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ export(horizonUI)
export(in_admin_group)
export(install_carnation)
export(is_site_admin)
export(is_valid_pattern_obj)
export(loadDataServer)
export(loadDataUI)
export(maPlotServer)
Expand Down Expand Up @@ -155,13 +156,17 @@ importFrom(htmltools,tags)
importFrom(htmltools,withTags)
importFrom(igraph,"V<-")
importFrom(igraph,V)
importFrom(methods,.hasSlot)
importFrom(methods,new)
importFrom(plotly,add_markers)
importFrom(plotly,add_trace)
importFrom(plotly,event_data)
importFrom(plotly,event_register)
importFrom(plotly,ggplotly)
importFrom(plotly,layout)
importFrom(plotly,plot_ly)
importFrom(plotly,plotlyOutput)
importFrom(plotly,plotlyProxy)
importFrom(plotly,renderPlotly)
importFrom(plotly,save_image)
importFrom(plotly,toWebGL)
Expand Down
13 changes: 13 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# carnation

## v0.99.9

- carnation now supports `edgeR` and `limma` output in differential
expression analysis.
- The scatter plot now allows gene selection directly from the plot
and viewed in the table. Genes selected in the table can be added
to the gene scratchpad and tracked across the app.
- The main loading page now shows the currently loaded dataset.
This prevents accidentally reloading or replacing the current
data.
- Pattern analysis can now be added to a carnation object via
the `Load data` module, either in TSV or Rds format.

## v0.99.8

- Add packages to `Suggests::` to address build issues.
Expand Down
90 changes: 88 additions & 2 deletions R/app.R
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,12 @@ run_carnation <- function(credentials=NULL, passphrase=NULL, enable_admin=TRUE,

withSpinner(
uiOutput('load_ui')
) # withSpinner
), # withSpinner

br(),
fluidRow(
column(3, uiOutput('current_obj'))
) # fluidRow
), # tabPanel

tabPanel('DE analysis',
Expand Down Expand Up @@ -647,6 +652,9 @@ run_carnation <- function(credentials=NULL, passphrase=NULL, enable_admin=TRUE,
# list to hold original object and file path
original <- reactiveValues(obj=NULL, path=NULL)

# reactiveValues to hold loaded project
current <- reactiveValues(proj=NULL, analysis=NULL)

# list to hold user details
user_details <- reactiveValues(username=NULL, admin=FALSE)

Expand Down Expand Up @@ -1073,6 +1081,46 @@ run_carnation <- function(credentials=NULL, passphrase=NULL, enable_admin=TRUE,
x
})

# make sure 'padj' & 'log2FoldChange' columns exist in res objects
# or supported alternatives exist
sanitized_res_list <- obj[[ res.name ]]

# supported column names
column_names <- config()$server$de_analysis$column_names
defaults <- names(column_names)

# these res objects will be dropped
drop_res_names <- NULL

for(name in names(sanitized_res_list)){
res <- sanitized_res_list[[ name ]]$res
res <- as.data.frame(res)

for(cname in defaults){
idx <- colnames(res) %in% column_names[[ cname ]]

# if matches exist
if(sum(idx) > 0){
if(sum(idx) > 1){
# only use the first match if multiple matches
# and show warning
message('Warning: Ambiguous ', cname, 'column for ', name, '.\nUsing ', colnames(res)[which(idx)[1]])
}

idx <- which(idx)[1]
colnames(res)[idx] <- cname
} else {
message('Unsupported res type for ', name, ':', cname, ' column not found, skipping')
drop_res_names <- c(drop_res_names, name)
}
}
sanitized_res_list[[ name ]]$res <- res
}

# remove unsupported res objects
sanitized_res_list <- sanitized_res_list[ !names(sanitized_res_list) %in% drop_res_names ]
obj[[ res.name ]] <- sanitized_res_list

# add obj slots to reactive values
obj <- make_final_object(obj)

Expand Down Expand Up @@ -1237,8 +1285,28 @@ run_carnation <- function(credentials=NULL, passphrase=NULL, enable_admin=TRUE,
selected='DE analysis')
updateTabsetPanel(session, inputId='de_mode',
selected='Summary')

# update current project
current$proj <- input$dds

al <- assay.list$l[[ input$dds ]]
idx <- which(unname(al) == input$assay)
current$analysis <- names(assay.list$l[[ input$dds ]])[idx]

}) # observeEvent load data

# show loaded dataset
output$current_obj <- renderUI({
req(current$proj)

tags$div(
class='div-stats-card',
tags$p('Currently loaded:'),
tags$p(' - Project: ', tags$i(current$proj)),
tags$p(' - Analysis: ', tags$i(current$analysis))
)
})

# update comparison menus after load
observeEvent(app_object$res, {
validate(
Expand Down Expand Up @@ -1604,7 +1672,25 @@ run_carnation <- function(credentials=NULL, passphrase=NULL, enable_admin=TRUE,
gene.to.plot=gene_scratchpad())
})

scatterPlotServer('scatterplot', app_object, scatterplot_args, config)
scatter_data <- scatterPlotServer('scatterplot',
app_object,
scatterplot_args,
gene_scratchpad,
reactive({ input$reset.genes }),
config)

observeEvent(scatter_data(), {
g <- scatter_data()$genes

# only update scratchpad if different genes returned
if(length(setdiff(g, input$gene.to.plot)) != 0){
# update gene selector with clicked genes
updateSelectizeInput(session, 'gene.to.plot',
choices=gene.id$gene,
selected=g,
server=TRUE)
}
})

##################### UpSet plot #########################

Expand Down
2 changes: 2 additions & 0 deletions R/carnation-pkg.R
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@
#' - Manage local data in single-user mode or deploy on a server to share with
#' collaborators using in-built user management system.
#'
#' Main function to run the app: [run_carnation()]
#'
#' @keywords internal
'_PACKAGE'
Loading
Loading