闪亮:反应性 header 基于文件输入
Shiny: reactive header based on file input
我想让我的 Shiny 程序的 header 通过使用上传的文件名更新自身来响应文件输入。这是我拥有的:
ui.R:
shinyUI(pageWithSidebar(
headerPanel("File"),
sidebarPanel(
fileInput("file1", "Upload a file:",
accept = c('.csv','text/csv','text/comma-separated-values,text/plain'),
multiple = F) ) ))
server.R:
shinyServer(function(input, output, session) {
in_data <- reactive({
inFile <- input$file1
if (is.null(inFile)) return(NULL)
read.csv(inFile$datapath, as.is=T)
}) })
基本上,我想更新 header 面板,以便在用户上传文件后显示 "File [name]"。我在 server.R 中访问 ui.R 时遇到问题。我尝试在 server.R 中调用 in_data() 但找不到它。有什么想法吗?
诀窍是在有 headerPanel
的地方使用 uiOutput
,例如,
ui <- pageWithSidebar(
uiOutput("header_panel"),
sidebarPanel(
fileInput("file1", "Upload a file:",
accept = c('.csv','text/csv','text/comma-separated-values,text/plain'),
multiple = F
)
),
mainPanel()
)
server <- function(input, output, session) {
in_data <- reactive({
inFile <- input$file1
if (is.null(inFile)) return(NULL)
read.csv(inFile$datapath, as.is=T)
})
output$header_panel <- renderUI({
inFile <- input$file1
if (is.null(inFile)) headerPanel('File')
else headerPanel(paste('File', inFile$name))
})
}
shinyApp(ui=ui, server=server)
我想让我的 Shiny 程序的 header 通过使用上传的文件名更新自身来响应文件输入。这是我拥有的:
ui.R:
shinyUI(pageWithSidebar(
headerPanel("File"),
sidebarPanel(
fileInput("file1", "Upload a file:",
accept = c('.csv','text/csv','text/comma-separated-values,text/plain'),
multiple = F) ) ))
server.R:
shinyServer(function(input, output, session) {
in_data <- reactive({
inFile <- input$file1
if (is.null(inFile)) return(NULL)
read.csv(inFile$datapath, as.is=T)
}) })
基本上,我想更新 header 面板,以便在用户上传文件后显示 "File [name]"。我在 server.R 中访问 ui.R 时遇到问题。我尝试在 server.R 中调用 in_data() 但找不到它。有什么想法吗?
诀窍是在有 headerPanel
的地方使用 uiOutput
,例如,
ui <- pageWithSidebar(
uiOutput("header_panel"),
sidebarPanel(
fileInput("file1", "Upload a file:",
accept = c('.csv','text/csv','text/comma-separated-values,text/plain'),
multiple = F
)
),
mainPanel()
)
server <- function(input, output, session) {
in_data <- reactive({
inFile <- input$file1
if (is.null(inFile)) return(NULL)
read.csv(inFile$datapath, as.is=T)
})
output$header_panel <- renderUI({
inFile <- input$file1
if (is.null(inFile)) headerPanel('File')
else headerPanel(paste('File', inFile$name))
})
}
shinyApp(ui=ui, server=server)