Saya seorang pemula untuk dasbor yang mengkilap dan berkilau. Saat ini, saya ingin memiliki 2 tab berbeda yang dapat menghasilkan banyak plot jika file CSV yang sesuai dimasukkan.

Saya memiliki fungsi untuk memformat file CSV pengguna yang mengubahnya menjadi bingkai data yang terdapat dalam daftar. Saya kemudian memiliki fungsi lain yang dapat memplot bingkai data ini (mengubahnya menjadi plot nomor salinan). Ini adalah versi sederhana dari apa yang saya miliki saat ini untuk dasbor...

ui <-
  dashboardPage(
    skin = "blue",
    dashboardHeader(title = "Dashboard"),
    dashboardSidebar(
      sidebarMenu(
        menuItem("Guide", tabName = "Guide", icon = icon("info")),
        menuItem("Copy-Number-Analysis", icon = icon("dna"),
                 menuSubItem("Filtered-Amplicon", tabName = "Filtered-Amplicon", icon = icon("arrow-alt-circle-right")),
                 menuSubItem("Whole-Chromosome", tabName = "Whole-Chromosome", icon = icon("arrow-alt-circle-right"))
                 )
      )
    ),
    dashboardBody(
      tabItems(
        tabItem(tabName = "Guide",
                fluidRow(box(
                  title = strong("How do I use this application?",style = "font-size: 160%;"),
                ))
        ),
        tabItem(tabName = "Filtered-Amplicon",
                fluidRow(box(
                  title = strong("Filtered Amplicon Copy Number Plot", style = "font-size: 160%;"),
                  status = "danger",
                  solidHeader = T,
                  width = 12,
                  fileInput("file1", h4("Input your file(s) in csv format!"),
                            accept = c(
                              "text/csv",
                              "text/comma-separated-values,text/plain",
                              ".csv"),
                            multiple = TRUE
                  ),
                  uiOutput("PlotVisualizeAmplicon") #Visualize plot
                ))),
        tabItem(tabName = "Whole-Chromosome",
                fluidRow(box(
                  title = strong("Whole Chromosome Copy Number Plot", style = "font-size: 160%;"),
                  status = "danger",
                  solidHeader = T,
                  width = 12,
                  fileInput("file2", h4("Input your file(s) in csv format!"),
                            accept = c(
                              "text/csv",
                              "text/comma-separated-values,text/plain",
                              ".csv"),
                            multiple = TRUE
                  ),
                  uiOutput("PlotVisualizeWhole") #Visualize plot
                ))
                )
        )
      )
    )
  )

server <- function(input, output) {
  #Set the number of max input
  maxPlot <- 100

  #AMPLICON PLOT
  #Data Input
  dataPlotInput2 <- reactive({
    if(is.null(input$file1)){return()}

    #Input CSVs
    files_name <- as.list(rep(NA, length(input$file1$datapath)))
    for (i in 1:length(input$file1$datapath)){
      files_name[[i]] <- as.character(input$file1[i,4])
    }

    files_list <- as.list(rep(NA, length(input$file1$datapath)))
    for(i in 1:length(input$file1$datapath)){
      files_list[[i]] <-  read_csv(
        file = as.character(files_name[[i]]))%>%
        select(1:5)
    }
    names(files_list) <- files_name

    #Copy Number analysis
    files_formated <- format_all(files_list)
    comparison_tbl_Amplicon <- ref_compare_all(files_formated, reference = reference1)
    comparison_tbl_Amplicon
  })
  # Produce plot(s)
  for (i in 1:maxPlot) {
    local({
      my_i <- i
      plotnameAmplicon <- paste("plot", my_i, sep="")
      output[[plotnameAmplicon]] <- renderPlot({
        plot_aneuploid(dataPlotInput2()[[my_i]], size = 2) + ggtitle(as.character(input$file1[my_i,1]))
      })
    })
  }
  output$PlotVisualizeAmplicon <- renderUI({
    if(is.null(input$file1)){return()}

    FileNumber <- nrow(input$file1)

    plot_output_list_Amplicon <- lapply(1:FileNumber, function(i) {
      plotnameAmplicon <- paste("plot", i, sep="")
      plotOutput(plotnameAmplicon, width = "100%", height = "400px")
    })
    do.call(tagList, plot_output_list_Amplicon)
  })

  ##WHOLE CHROMOSOME PLOT
  #Data input
  dataPlotInput3 <- reactive({
    if(is.null(input$file2)){return()}

    #Input CSVs
    files_name <- as.list(rep(NA, length(input$file2$datapath)))
    for (i in 1:length(input$file2$datapath)){
      files_name[[i]] <- as.character(input$file2[i,4])
    }

    files_list <- as.list(rep(NA, length(input$file2$datapath)))
    for(i in 1:length(input$file2$datapath)){
      files_list[[i]] <-  read_csv(
        file = as.character(files_name[[i]]))%>%
        select(1:5)
    }
    names(files_list) <- files_name

    #Copy Number analysis
    files_formated <- format_all(files_list)
    comparison_tbl_Whole <- ref_compare_whole_chr_all(files_formated, reference = reference1)
    comparison_tbl_Whole
  })
  #Produce plot(s)
  for (i in 1:maxPlot) {
    local({
      my_j <- i
      plotnameWhole <- paste("plot", my_j, sep="")

      output[[plotnameWhole]] <- renderPlot({
        plot_aneuploid_whole_chr(dataPlotInput3()[[my_j]], size = 2) + ggtitle(as.character(input$file2[my_j,1]))
      })
    })
  }
  output$PlotVisualizeWhole <- renderUI({
    if(is.null(input$file2)){return()}

    FileNumber <- nrow(input$file2)

    plot_output_list_Whole <- lapply(1:FileNumber, function(i) {
      plotnameWhole <- paste("plot", i, sep="")
      plotOutput(plotnameWhole, width = "100%", height = "400px")
    })
    do.call(tagList, plot_output_list_Whole)
  })


}

Tujuan akhir saya adalah untuk dapat menghasilkan plot yang berbeda di dua tab yang saya miliki yang seharusnya terlihat seperti ini dengan saya dapat menggunakannya secara bergantian ... masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini r shiny shinydashboard

0
ZainNST 20 Mei 2020, 20:38

1 menjawab

Jawaban Terbaik

Saya telah menemukan solusi. Dengan merangkum renderPlot di dalam renderUi dan dengan memberikan nama variabel yang berbeda untuk renderPlot (kesalahan konyol oleh saya), saya dapat menghasilkan output yang diinginkan.

  output$PlotVisualizeWhole <- renderUI({
    if(is.null(input$file2)){return()}

    FileNumber <- nrow(input$file2)

    plot_output_list_Whole <- lapply(1:FileNumber, function(i) {
      plotnameWhole <- paste("plotwhole", i, sep="")
      output[[plotnameWhole]] <- renderPlot({
        plot_aneuploid_whole_chr(dataPlotInput3()[[i]], size = 2) + ggtitle(as.character(input$file2[i,1]))})
      plotDownload <- paste("Downloaded", i, sep = "")
      plotOutput(plotnameWhole, width = "100%", height = "400px")
    })
    do.call(tagList, plot_output_list_Whole)
  })
0
ZainNST 21 Mei 2020, 08:13