Shiny app works locally but it having issues when going to the browser

Here is the error code:
Preparing to deploy application...DONE
Uploading bundle for application: 2710899...Warning in FUN(X[[i]], ...) :
Unable to find repository URL for package dqshiny

Here is my app code:

This is a Shiny web application. You can run the application by clicking

the 'Run App' button above.

Find out more about building applications with Shiny here:

http://shiny.rstudio.com/

library(shiny)
library(ggplot2)
library(utils)
library(base)
library(shinyWidgets)
library(dqshiny)
fonts <- list("Liberation Sans")

Function to capitalize user-typed inputs

Takes "gene" as input and returning "Gene"

capgene <- function(gene){
gene <- paste0(tolower(substring(gene, 1, 1)), tolower(substring(gene, 2)))
paste0(toupper(substring(gene, 1, 1)), substring(gene, 2))
}

Grep, wrapped in a function to pre-set options

format.grep <- function(gg){
grep(substr(capgene(gg), 1, 3), dict$GENES, value = T, ignore.case = T)
}

Function to draw feature plots from user-defined variables

simpleFeaturePlot <- function(gene = "Rbfox3",
color.use = 'red',
threshold = 0,
pt.size = 1,
to.include = "MSMO",
scale = 900){

Identify which data sets were user-selected and add the plotting coordinates to "frame" variable

If no data sets selected, return empty plot & exit function

if('MSMO' %in% to.include){
frame <- rbind(frame, MSMO.frame)
}
if('GSMO' %in% to.include){
frame <- rbind(frame, GSMO.frame)
}

if(length(to.include) == 0){d <- ggplot() + theme_classic() +
annotate("text", size = 12, fontface = 2,
color = color.use, x = 0, y = 0, label = "No Data Selected")
return(d)
}

Translate gene to caps format (Gene, not gene or GENE)

gene <- capgene(gene)

Build named list of data filehandles from vector of included datasets

fh <- lapply(to.include, FUN = function(sm) as.character(dict[which(dict$GENES == gene), paste(sm, sep = "")]))
names(fh) <- paste(to.include, sep = "
")# Extract relevant gene from staged data files for each sample
for(sm in to.include){
data <- c(data, readRDS(paste0(sm, "/staged/", fh[[paste(sm, sep = '_')]]))[gene, ])
}

Set background & highlight colors

colors <- c(grey(level = 0.7, alpha = 0.7), color.use)
names(colors) <- c('None', paste0(gene))

Get Plotting Coordinates

frame <- cbind(frame,
as.data.frame(matrix(data = 0,
nrow = nrow(frame),
ncol = 1)))
#adjust if umap
colnames(frame) <- c('umap_1', 'umap_2', 'Plot.Status')

Identify cells with expression of target gene

positive_cells <- names(data[data > threshold])
frame[which(rownames(frame) %in% positive_cells), 'Plot.Status'] <- paste0(gene)

Divide coordinate data to plot negatives (first) below positives (second)

frame1 <- frame[which(frame[, 'Plot.Status'] == 0), ]
frame2 <- frame[which(frame[, 'Plot.Status'] != 0), ]

Plot it. Return ggplot object & exit function, change to umap

d <- ggplot(mapping = aes(x = umap_1, y = umap_2)) +
geom_point(data = frame1, color = colors[1], size = pt.size) +
geom_point(data = frame2, aes(color = Plot.Status), size = pt.size, show.legend = F) +
scale_colour_manual(values = colors) + theme_classic() +
annotate("text", size = 6, fontface = 2, color = color.use, x = (min(frame$umap_1)+abs(0.1*min(frame$umap_1))), y = max(frame$umap_2), label = gene)
return(d)
}

Pre-Load mapping coordinates and dictionaries. Establish placeholders for plotting variables

This speeds up response time to user inputs

Could be moved into the previous function for improved memory management if needed

GSMO.frame <- readRDS('GSMO/GSMO_xy.rds')
MSMO.frame <- readRDS('MSMO/MSMO_xy.rds')
dict <- readRDS('consensus_dict.rds')
frame <- c()
data <- c()

Define UI. Shinythemes is an EASY way to pre-format color schemes & box styles.

If making changes, BE CAREFUL to clean up commas when adding/removing panel elements

ui <- fluidPage(width = 8, theme = shinythemes::shinytheme("slate"),

            # Application title
            titlePanel("GFAP-Cre:SmoM2 vs Math1-Cre-SmoM2 interactive explorer"),
            # Sidebar layouts 
            sidebarLayout(
              # Panel to take gene inputs from user
              sidebarPanel(
                div(class = "panel panel-warning",
                    style = "box-shadow: 5px 5px 15px -5px rgba(0, 0, 0, 0.3);",
                    strong(div(class = "panel-heading", "Gene Options")), 
                    # Which gene to plot
                    div(class = "panel-body",
                        strong(textInput("gene", "Gene", value = 'Rbfox3')),
                        #textInput(inputId = "gene" this means variable, label = "Gene Name", value = 'Mki67'),
                        # What threshold to use for calling positive values
                        sliderInput("threshold", "Expression Threshold (nUMI)",
                                    min = 0.00,
                                    max = 5.00,
                                    step = 0.25,
                                    value = 1),
                        selectInput("color", "Gene Color:", 
                                    c('Cyan' = "#00aeef", 'Sky Blue' = "#41b6e6", 'Teal' = "#487f84", 
                                      'Kelly Green' = "#348338", 'Sea Green' = "#006c5b", 'Olive' =  "#5c8118",
                                      'Orange' = "#c35413", 'Red' = "#da291c", 'Magenta' = "#c6007e",
                                      'Purple' = "#6558b1", 'Grape' = "#6d2077"), selected = "#c35413")
                        
                    ))
                ,       # Check box for data set selection, warning panel means the text is bold header is orange.
                div(class = "panel panel-warning",
                    style = "box-shadow: 5px 5px 15px -5px rgba(0, 0, 0, 0.3);",
                    strong(div(class = "panel-heading", "Dataset Selection")),
                    checkboxGroupButtons(inputId = "dataset", label ="",
                                         choiceNames = c("GFAP-Cre:SmoM2", "Math1-Cre:SmoM2"),
                                         choiceValues = c("GSMO", "MSMO"),
                                         selected = c("GSMO"), justified = T, individual =T, status = "danger")),
                    #one or the other cannot overlay the umaps
                # Panel to adjust graphical parameters (for figure generation)
                div(class = "panel panel-info",
                    style = "box-shadow: 5px 5px 15px -5px rgba(0, 0, 0, 0.3);")
                
                ,
                sliderInput("point.size",
                            "Point Size",
                            min = 0.00,
                            max = 2.00,
                            step = 0.2,
                            value = 0.8),
                # Button to download user-generated graphics in .pdf format
                downloadButton('downloadPlot', "Download as pdf")
              ), 
              
              # Format the graphics output in the main panel
              mainPanel(plotOutput("plot", width = '90%'))
            )

)

Define server logic/ making two new functions one for WT and one for the tumor

This is required to allow each plot to scale independently with screen size

The plot takes it's width from the clientData output, which is specified by the plotOutput function in the UI chunk

server <- function(input, output, session) {

plotInput = function(){
simpleFeaturePlot(gene = input$gene,
color.use = as.character(input$color),
threshold = as.numeric(input$threshold),
pt.size = as.numeric(input$point.size),
to.include = input$dataset,
scale = session$clientData$output_plot_width)
}

output$plot <- renderPlot({
validate(
need(expr = (capgene(input$gene) %in% format.grep(input$gene)), message = c(paste0(input$gene, ' not found!'),
'Did you mean: ',
paste(format.grep(input$gene))))
)
plotInput()
}, height = function() {
session$clientData$output_plot_width*0.9
})

download.plotInput = function(){
simpleFeaturePlot(gene = input$gene,
color.use = as.character(input$color),
threshold = as.numeric(input$threshold),
# pt.size = as.numeric(input$point.size),
to.include = input$dataset)
}

output$downloadPlot <- downloadHandler(
filename = function() { paste0(input$gene, '.pdf') },
content = function(file) {
ggsave(file, plot = download.plotInput(), width = 10, height = 10, device = "pdf")
}
)
}

Run the application

shinyApp(ui = ui, server = server)

Thank you for any help!

My guess is you had installed dqshiny from CRAN, as this package has since removed from CRAN, when reconnect tried to understand your dependencies and duplicate them it tried to install dqshiny from cran and failed as this is now not possible.
Therefore I suggest you install dqshiny dev version from github and then rsconnect will recognise that as how to go about it.

On the other hand if dqshiny was removed from CRAN, it may give you pause to using it.

Hi thank you for your reply. I tried to install using remotes::install_github("daqana/dqshiny"). I still get the same error when trying to publish.

You may need to restart R for that version to load?
confirm the version with packageVersion()

after checking the version it comes back as 0.0.3

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.