2017-12-13 19 views
1

条件付きパネルでR光沢のある異常な動作が発生しました。私は、ユーザーがアップロードできるファイルの数に応じて複数のファイル入力をしたいと思っています。以下は還元可能なコードです。この問題は、条件が1より大きい場合に発生します。すべてのファイルにcsvファイルを取り込むことはできませんか?条件「列の数が2である」とき、私は、私は、これはコーディングの問題であり、最初の列にファイルをアップロードすることはできません最初複数のファイル入力がある光沢のある条件付きパネル

library('shiny') 
library('shinythemes') 

## adding the conditional statements 
ui = 
navbarPage("Page Title", 
    tabPanel("Panel 1", 
    sidebarPanel(
     ## Add Name, 
     ## Number of surveys analysising 
     numericInput("n_values", "Number of columns in next panel:", 1, min = 1, max = 2) 
    ), 
    mainPanel(
     tags$div(
     h2("Home Page") 
    ) 
    ) 
    ), 
    tabPanel("Panel 2", 
     conditionalPanel(condition = "input.n_values == 1", 
     fixedPage(theme = "flatly", 
      fixedRow(
      column(2,"First Column", 
       fileInput("File1", "Choose a CSV files", multiple = F), 
       p("Click the button to check the data was read in correctly") 
      ), 
      fixedRow(
       column(12, 
       verbatimTextOutput("errorText1") 
      ) 
      )  
     ) 
     ) 
    ), 
     conditionalPanel(condition = "input.n_values == 2", 
     fixedPage(theme = "flatly", 
      fixedRow(
      column(2,"First Column", 
       fileInput("File1", "Choose a CSV files", multiple = F), 
       p("Click the button to check the data was read in correctly") 
      ), 
      column(2,"Second Column", 
       fileInput("File2", "Choose a CSV files", multiple = F), 
       p("Click the button to check the data was read in correctly") 
      ),   
      fixedRow(
       column(12, 
       verbatimTextOutput("errorText2") 
      ) 
      )  
     ) 
     ) 
    )  
    ) 
) 

server = function(input, output,session) { 
    ## Call the error message function and print 
    output$errorText1 <- renderText({ 
    validate(
     if (input$n_values == 1) { 
     need(!is.null(input$File1) 
       , 'You need to input the files before we can validate the data. Please select all the necessary files.')    
     } 
    ) 
    validate("allgravy") 

    }) 
    output$errorText2 <- renderText({ 
    validate(
     if (input$n_values == 2) { 
     need(!is.null(input$File1) & !is.null(input$File2) 
       , 'You need to input the files before we can validate the data. Please select all the necessary files.')   
     } 
    ) 
    validate("allgravy") 
    })  
} 

shinyApp(ui, server) 

秒ではなく、ためにできますか?

conditionalPanelで、再現性の例は下記を参照してください

ui = 
navbarPage("Page Title", 
    tabPanel("Panel 1", 
    sidebarPanel(
     ## Add Name, 
     ## Number of surveys analysising 
     numericInput("n_surveys", "Number of surveys analysing:", 2, min = 1, max = 10) 
    ), 
    mainPanel(
     tags$div(
     h2("Home Page") 
    ) 
    ) 
    ), 
    tabPanel("Panel 2", 
     fixedPage(theme = "flatly", 
     fixedRow(
      column(2,h4("First Column"), 
      fileInput("File1", "Choose a CSV files", multiple = F), 
      actionButton("CheckData", "Validate Input"), 
      p("Click the button to check the data was read in correctly") 
     ), 
      column(2,h4("Second Column"), 
      fileInput("File2", "Choose a CSV files", multiple = F) 
     ),   
      fixedRow(
      column(12, 
       verbatimTextOutput("errorText") 
      ) 
     )  
     ) 
    ) 
    ) 
) 

server = function(input, output,session) { 
    ## Call the error message function and print 
    output$errorText <- renderText({ 
    validate(
     need(!is.null(input$File1) 
      , 'You need to input the files before we can validate the data. Please select all the necessary files.') 
    ) 
    validate("seems allgood") 
    }) 
} 

shinyApp(ui, server) 

議長

答えて

1

問題はあなたが二度同じ要素を使用していることではありません時にコードが動作します。コードでfileInput("File1", "Choose a CSV files", multiple = F)という行を2回使用していますが、これは許可されていません(私はthisと関係があると思います)。

これを解決するには、要素を1回だけ使用して条件を変更します。このような例:

library('shiny') 
library('shinythemes') 

## adding the conditional statements 
ui = 
    navbarPage("Page Title", 
      tabPanel("Panel 1", 
         sidebarPanel(
         ## Add Name, 
         ## Number of surveys analysising 
         numericInput("n_values", "Number of columns in next panel:", 1, min = 1, max = 2) 
        ), 
         mainPanel(
         tags$div(
          h2("Home Page") 
         ) 
        ) 
      ), 
      tabPanel("Panel 2", 
         conditionalPanel(condition = "input.n_values == 1 | input.n_values == 2", 
             fixedPage(theme = "flatly", 
               fixedRow(
                column(2,"First Column", 
                  fileInput("File1", "Choose a CSV files", multiple = F), 
                  p("Click the button to check the data was read in correctly") 
                ), 
                conditionalPanel(condition = "input.n_values == 2", 
                    column(2,"Second Column", 
                      fileInput("File2", "Choose a CSV files", multiple = F), 
                      p("Click the button to check the data was read in correctly") 
                    ) 
                ) 
               ), 
               fixedRow(
                column(12, 
                  verbatimTextOutput("errorText2") 
                ) 
               )  
             ) 
        ) 
      )  
) 
) 

server = function(input, output,session) { 
    ## Call the error message function and print 
    output$errorText1 <- renderText({ 
    validate(
     if (input$n_values == 1) { 
     need(!is.null(input$File1) 
      , 'You need to input the files before we can validate the data. Please select all the necessary files.')    
     } 
    ) 
    validate("allgravy") 

    }) 
    output$errorText2 <- renderText({ 
    validate(
     if (input$n_values == 2) { 
     need(!is.null(input$File1) & !is.null(input$File2) 
      , 'You need to input the files before we can validate the data. Please select all the necessary files.')   
     } 
    ) 
    validate("allgravy") 
    })  
} 

shinyApp(ui, server) 

私は本当にフォーマットを見てか、レイアウトをしませんでした、このコードは単なる実施例を説明することです。お役に立てれば!

+0

この問題を解決してくれてありがとうございました。上記のケースに関するコメントがありましたか?10の条件では、 –

関連する問題