Как визуализировать вывод таблицы в tabPanel на странице NavBar + приложение Rshiny - PullRequest
0 голосов
/ 28 сентября 2018

Я создаю страницу панели инструментов, на которой пользователь загружает файл, и, нажимая кнопку действия, он должен запустить код сервера и показать вывод, а также разрешить загрузку вывода в виде файла.Ниже приведен код, который показывает основной пользовательский интерфейс.

Мне понадобится помощь с функцией сервера, чтобы отобразить вывод команды в функции сервера в вывод «Таблица» на странице NavBar, где могут быть первые 5 строк.показано в пользовательском интерфейсе и загрузите полный выходной файл, нажав кнопку «Список загрузки».Я новичок с Ршины.Любая помощь будет полезна.

library(shiny)
library(shinydashboard)

sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Documentation", tabName = "documentation",selected=FALSE),
menuItem("Dataset", tabName = "dataset", badgeColor = "green"),
menuItem("Result", tabName = "results", badgeColor = "green")
))




body <- dashboardBody(
tabItems(
tabItem(tabName = "documentation",h3("Tool Documentation")),
tabItem(tabName = "dataset",menuItem(icon = NULL, fileInput("PE", "Upload input file:")),
menuSubItem(icon = icon("refresh"),actionButton("Start","Analyze"))),

tabItem(tabName = "results",navbarPage(tabPanel("summary","Summary",icon = icon("list-alt")),
                   tabPanel("Table",tableOutput("table"),icon = icon("table")),
                            downloadButton("downList", "Download List")))))



# Put them together into a dashboardPage
ui <- dashboardPage(dashboardHeader(title = "FanDB"),
          sidebar,
          body)

# Define server logic 
server <- function(input, output, session) {
##run this command on input$PE file on the click of actionButton

  output$Table <- renderTable({ 
  input$Start
  req(input$PE)
  a<-read.delim(input$PE,sep="\t",header=T)
  b<-a[a[,6]==2,1]
  {
  return(b)
  }

   #Show the results from the actionButton in the Table panel in the navbar page and download the results using downloadButton
 })

}

shinyApp(ui, server) 

Или отображение меню «результатов» (navbarPage), которое в данный момент находится в боковом меню, для панели инструментов. По завершении actionButton было бы идеально.

1 Ответ

0 голосов
/ 28 сентября 2018

Существует опечатка: output$Table должно быть output$table для ссылки на таблицу, а не на вкладку, в которой она находится.Кроме того, чтобы загрузить файл из fileInput, вам необходимо получить доступ к input$PE$datapath

. Я бы структурировал это, используя eventReactive, который вызывается actionButton, для загрузкиданные и сделать их доступными в качестве реактивного выражения, которое используется renderTable

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

    # When button is pressed, load data and make available as reactive expression
    table_content <- eventReactive(input$Start, {
        req(input$PE$datapath)
        a <- read.delim(input$PE$datapath,sep="\t",header=T)
        b <- a[a[,6]==2,1]
        return(b)
    })

    # Render data as table
    #   Since table_content is reactive, the table will update when table_content changes 
    output$table <- renderTable({
        table_content()
    })
}

Чтобы загрузить таблицу, вы можете просто настроить функцию downloadHandler с таким же выражением table_content(), каксодержание.На downloadHandler есть куча других вопросов, поэтому я не буду вдаваться в подробности.


Если вы хотите, чтобы кнопка input$Start при нажатии переключалась на вкладку результатов, вынужно сделать 2 вещи:

Во-первых, добавить идентификатор к вашему sidebarMenu:

sidebar <- dashboardSidebar(
    sidebarMenu(id = 'tabs',
    ...

Во-вторых, настроить updateTabItems, чтобы изменить выбранную вкладку на results.Поскольку вы используете shinydashboard, вы хотите использовать shinydashboard::updateTabItems, а не shiny:: updateTabsetPanel, как в этот вопрос .Поскольку вы хотите изменить вкладки при загрузке содержимого таблицы, я бы сделал table_content() реактивный триггер, добавив следующее:

observeEvent(table_content(),{
    updateTabItems(session, "tabs", 'results')
})

Теперь, когда table_content() изменяется, вкладка будетпереключился на results.Если в вашем eventReactive что-то пошло не так и файл не может быть прочитан или обработан должным образом, вкладка не переключится.

...