Загрузка файла не работает с Navbar в R Shiny

Я не могу заставить функцию загрузки файлов работать должным образом при использовании панели навигации. Вот что у меня есть для server.R:

library(shiny)
library(markdown)

function(input, output) {

  df <- NULL
  current_file <- NULL
  in_data <- reactive({
    inFile <- input$file1
    if (is.null(inFile)){
  return(NULL)}     
else {df <<- read.csv(inFile$datapath, header=input$header, sep=input$sep, 
                     quote=input$quote)
      current_file <<- inFile$name
}

return(NULL)
  })


output$fileInfo <- renderTable({  
call.me = in_data()
data.frame(current_file)
})




}

И для ui.R I есть это:

library(shiny)
library(markdown)

navbarPage('Navigation Bar',
       tabPanel('File Information', verbatimTextOutput('fileInfo'),
                sidebarLayout(
                  sidebarPanel(fileInput('file1', 'Choose CSV File',
                                         accept=c('text/csv', 
                                                  'text/comma-separated-values,text/plain', 
                                                  '.csv')),
                    checkboxInput('header', 'Header', TRUE),
                    radioButtons('sep', 'Separator',
                                 c(Comma=',',
                                   Semicolon=';',
                                   Tab='\t'),
                                 ','),
                    radioButtons('quote', 'Quote',
                                 c(None='',
                                   'Double Quote'='"',
                                   'Single Quote'="'"),
                                 '"'),
                    tags$hr()), 
                  mainPanel()
                )))

В конце концов я хочу иметь несколько вкладок на панели навигации, и я хочу иметь возможность доступа к данным из каждой вкладки. Все, что мне сейчас нужно, это дать мне имя загруженного файла. Это прекрасно работает, когда я не пытаюсь вписать панель навигации. Но теперь это похоже на вывод HTML. Какие-нибудь советы? Очень признателен.

1 ответ

Это очень плохая идея заручиться использованием глобального назначения <<- Вот. Ваши данные будут доступны во всем приложении, если вы будете использовать реактив - именно так и предполагается использовать блеск.

Кроме того, посмотрите в shiny::validate (пример использования ниже) для проверки входных данных.

library("shiny")

options(shiny.maxRequestSize = 9*1024^2)

server <- function(input, output) {

  # the data read in by read.csv will now be accessible throughout the app
  # by calling this reactive, e.g. in_data().
  in_data <- reactive({
    shiny::validate(
      need(input$file1, "Select a file!")
    )

    read.csv(input$file1$datapath, header = input$header,
             sep = input$sep, quote = input$quote)
  })

  # an example, we're calling the reactive to access the data loaded
  output$file_info <- renderTable({
    data.frame(in_data())
  })

}

ui <- navbarPage('Navigation Bar',
  tabPanel('File Information', verbatimTextOutput('fileInfo'),
    sidebarLayout(
      sidebarPanel(
        fileInput('file1', 'Choose CSV File', accept = c('text/csv', 'text/comma-separated-values,text/plain', '.csv')),
        checkboxInput('header', 'Header', TRUE),
        radioButtons('sep', 'Separator', c(Comma = ',', Semicolon = ';', Tab = '\t'), ','),
        radioButtons('quote', 'Quote', c(None = '', 'Double Quote'='"', 'Single Quote' = "'"),'"'),
        tags$hr()
        ),
      mainPanel(
        tableOutput("file_info")
        )
      )
    )
  )

shinyApp(ui, server)

введите описание изображения здесь

Другие вопросы по тегам