Загрузка файла не работает с 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)