Shiny:基于文件输入的反应式标头

Kir*_*bbe 2 r shiny

我想让我的 Shiny 程序的标头通过使用上传的文件名更新自身来对文件输入做出反应。这是我所拥有的:

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) ) ))
Run Code Online (Sandbox Code Playgroud)

服务器.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)
    }) })
Run Code Online (Sandbox Code Playgroud)

基本上,我想更新 headerPanel,以便在用户上传文件后显示“文件 [名称]”。我在访问 server.R 中的 ui.R 时遇到困难。我尝试在 server.R 中调用 in_data() 但找不到它。有任何想法吗?

Mat*_*rde 5

诀窍是uiOutput在你有的地方使用headerPanel,例如,

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)
Run Code Online (Sandbox Code Playgroud)