How do I get a barplot when I use actionbutton to input a gene from a dataframe column?

Sorry,I really need help from you .
Here is my sample data and code:

The column is Gene sets

**I mean when I input one gene and the click the actionbutton, the barplot will appear but I tried **
several times it doesn't work.

My code here:

library(shiny)
library(dplyr)
library(tidyr)
library(ggplot2)
library(gridExtra)

mean_data <- data.frame(
  Name = c(paste0("Group_", LETTERS[1:20])),
  matx <- matrix(sample(1:1000, 1000, replace = T), nrow = 20)
)
names(mean_data)[-1] <- c(paste0("Gene_", 1:50))

sd_data <- data.frame(
  Name = c(paste0("Group_", LETTERS[1:20])),
  matx <- matrix(runif(1000, 5, 10), nrow = 20)
)
names(sd_data)[-1] <- c(paste0("Gene_", 1:50))


###
ui <- fluidPage(
  
  pageWithSidebar(
    headerPanel("123"),
    sidebarPanel(
      selectInput(
        "selectGeneSymbol", 
        "123:", 
        choices = colnames(mean_data)[-1],
        multiple =F,
        width = 400,
        selected = 1 
      ),

      actionButton(inputId = "plot1", label = "FPKM"),
    ),
    mainPanel(
      uiOutput("all")    
    )
  )
  
)

server <- function(input, output, session) {
  
  plot_data1 <- reactive({
    subset(mean_data, colnames(mean_data)[-1] %in% input$selectGeneSymbol)
  })
  
  global <- reactiveValues(out = NULL)
  
  observeEvent(input$plot1, {
    global$out <- plotOutput("plot1", height=500)
  })
  

  
  output$all <- renderUI({
    global$out
  })
  
  p1 <- eventReactive(list(input$plot1,
                           input$all), {
                             ggplot(data = mean_data, aes(x = mean_data$Name, y = mean_data[,input$selectGeneSymbol],fill=Name)) +
                               geom_bar(stat = "identity", position = position_dodge(0.9), width = 0.9) +
                               geom_errorbar(aes(ymin = mean_data[,input$selectGeneSymbol] - sd_data[,input$selectGeneSymbol], ymax = mean_data[,input$selectGeneSymbol] + sd_data[,input$selectGeneSymbol]), width = .2, position = position_dodge(0.9)) +
                               theme_classic2() +
                               rotate_x_text(angle = 45) +
                               theme(legend.position = "none") +
                               labs(title = input$selectGeneSymbol, x = NULL, y = "123_value")
                           })

  
  output$plot1 <- renderPlot({ p1() })
  output$plot3 <- renderPlot({ grid.arrange(p1(),p2(), ncol=1) })
  
  
}

# Create Shiny app ----
shinyApp(ui = ui, server = server)

I combined mean_data and sd_data before and it works well.

Now I use both of them and choose the column of mean_data as the input but the actionbutton doesn't work .The barplot always appear before clicking the button.

I tried several times but I don't know where the code I have to change.

I need your help. And it's urgent. Vary thankful.

Who can give me some advice

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

If you have a query related to it or one of the replies, start a new topic and refer back with a link.