2017-10-18 74 views
0

我想輸入兩個文件,執行一些轉換並返回一個數據表。它工作正常,如果我硬編碼的文件路徑,但不是如果我使用fileInput。我使用的是obersveEvent,因爲選項和操作比我在可重現示例中顯示的要複雜一些。 關於代碼可能出錯的任何建議?fileInput不返回任何數據框

library(shiny) 
library(shinydashboard) 
library(data.table) 
library(DT) 

## 
ui <- shinyUI(pageWithSidebar(
    headerPanel("Test app"), 
    sidebarPanel(
     fileInput("Env_db1", "Choose CSV File for DB1", 
       accept = c(
        "text/csv", 
        "text/comma-separated-values,text/plain", 
        ".csv") 
    ), 

     fileInput("Env_db2", "Choose CSV File for DB2", 
       accept = c(
        "text/csv", 
        "text/comma-separated-values,text/plain", 
        ".csv") 
    ) 
    , 
    actionButton(
     inputId = "submit_loc", 
     label = "Submit") 
), 

    mainPanel(
    DT::dataTableOutput("table")) 

) 
) 


## 
server <- shinyServer(function(input, output) { 
    observeEvent(
    eventExpr = input$submit_loc, 
    handlerExpr = 
    { 
     req(input$file1) 
     inFile1 <- input$file1 
     if(is.null(input$file1))  return(NULL) 
     Env_1<- read.csv(inFile1$datapath, header = TRUE, sep = ";") 


     req(input$file2) 
     inFile2 <- input$file2 
     if(is.null(input$file2))  return(NULL) 
     Env_2 <- read.csv(inFile2$datapath, header = TRUE, sep = ";") 


     Difference <-rbind(Env_1,Env_2) 

     output$table = DT::renderDataTable(server = TRUE,{ 
     DT::datatable(Difference, 
         extensions=c("Buttons",'Scroller'), 
         options = list(dom = 'Bfrtip', 
            buttons = c('copy', 'csv', 
               'excel', 'pdf', 
               'print'), 
            scrollY = 500, 
            scroller = TRUE) 
     ) 
     }) 
    }) 
}) 
## 
shinyApp(ui = ui, server = server) 

回答

1

fileInput變量的名稱是錯誤的,而不是input$file1input$file2應該input$Env_db1input$Env_db2。如下所示替換變量,您的代碼正常工作。

library(shiny) 
library(shinydashboard) 
library(data.table) 
library(DT) 

## 
ui <- shinyUI(pageWithSidebar(
    headerPanel("DBC Comparison"), 
    sidebarPanel(
    fileInput("Env_db1", "Choose CSV File for DB1", 
       accept = c(
       "text/csv", 
       "text/comma-separated-values,text/plain", 
       ".csv") 
    ), 

    fileInput("Env_db2", "Choose CSV File for DB2", 
       accept = c(
       "text/csv", 
       "text/comma-separated-values,text/plain", 
       ".csv") 
    ) 
    , 
    actionButton(
     inputId = "submit_loc", 
     label = "Submit") 
), 

    mainPanel(
    DT::dataTableOutput("table")) 

) 
) 


## 
server <- shinyServer(function(input, output) { 
    observeEvent(
    eventExpr = input$submit_loc, 
    handlerExpr = 
    { 
     req(input$Env_db1) 
     inFile1 <- input$Env_db1 
     if(is.null(input$Env_db1))  return(NULL) 
     Env_1<- read.csv(inFile1$datapath, header = TRUE, sep = ";") 


     req(input$Env_db2) 
     inFile2 <- input$Env_db2 
     if(is.null(input$Env_db2))  return(NULL) 
     Env_2 <- read.csv(inFile2$datapath, header = TRUE, sep = ";") 


     Difference <-rbind(Env_1,Env_2) 

     output$table = DT::renderDataTable(server = TRUE,{ 
     DT::datatable(Difference, 
         extensions=c("Buttons",'Scroller'), 
         options = list(dom = 'Bfrtip', 
            buttons = c('copy', 'csv', 
               'excel', 'pdf', 
               'print'), 
            scrollY = 500, 
            scroller = TRUE) 
     ) 
     }) 
    }) 
}) 
## 
shinyApp(ui = ui, server = server) 

希望它有幫助!

1

誤您已在server.R使用file1指你正在閱讀爲Env_db1

更新後的代碼輸入文件對象:

library(shiny) 
    library(shinydashboard) 
    library(data.table) 
    library(DT) 

    ## 
    ui <- shinyUI(pageWithSidebar(
    headerPanel("DBC Comparison"), 
    sidebarPanel(
     fileInput("Env_db1", "Choose CSV File for DB1", 
       accept = c(
        "text/csv", 
        "text/comma-separated-values,text/plain", 
        ".csv") 
    ), 

     fileInput("Env_db2", "Choose CSV File for DB2", 
       accept = c(
        "text/csv", 
        "text/comma-separated-values,text/plain", 
        ".csv") 
    ) 
     , 
     actionButton(
     inputId = "submit_loc", 
     label = "Submit") 
    ), 

    mainPanel(
     DT::dataTableOutput("table")) 

) 
) 


    ## 
    server <- shinyServer(function(input, output) { 
    observeEvent(
     eventExpr = input$submit_loc, 
     handlerExpr = 
     { 
     req(input$Env_db1) 
     inFile1 <- input$Env_db1 
     if(is.null(input$Env_db1))  return(NULL) 
     Env_1<- read.csv(inFile1$datapath, header = TRUE, sep = ";") 


     req(input$Env_db2) 
     inFile2 <- input$Env_db2 
     if(is.null(input$Env_db2))  return(NULL) 
     Env_2 <- read.csv(inFile2$datapath, header = TRUE, sep = ";") 


     Difference <-rbind(Env_1,Env_2) 

     output$table = DT::renderDataTable(server = TRUE,{ 
      DT::datatable(Difference, 
         extensions=c("Buttons",'Scroller'), 
         options = list(dom = 'Bfrtip', 
             buttons = c('copy', 'csv', 
                'excel', 'pdf', 
                'print'), 
             scrollY = 500, 
             scroller = TRUE) 
     ) 
     }) 
     }) 
    }) 
    ## 
    shinyApp(ui = ui, server = server)