2017-03-27 5 views
0

ナビゲーションバーを使用しているときにファイルアップロード機能が正しく動作することができません。ここで私はserver.Rのために持っているものです:私は最終的には、ナビゲーションバーで複数のタブを持つようにしたい、と私はできるようにしたいRのナビゲーションバーでファイルアップロードが動作しないShiny

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() 
       ))) 

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.RIためには、これを持っています各タブからデータにアクセスします。私が今やっているのは、アップロードされたファイルの名前を教えてくれることだけです。これは、ナビゲーションバーに収まるようにしないとうまくいくが、今はHTML出力のように見える。任意のヒント?とても有難い。

答えて

0

ここにグローバル割り当て<<-の使用を参加させることは非常に悪い考えです。あなたのデータは、反応性を使用している場合には、アプリケーション全体でグローバルに利用可能になります。これは光沢を利用する方法です。

また、入力を検証するために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) 

enter image description here

+0

ありがとう!私はR Shinyにとってはかなり新しいです。グローバル変数を使用していないのはなぜですか? –

+0

グローバル(http://rstudio.github.io/shiny/tutorial/#scopingを参照)を使用したい状況がいくつかありますが、この場合、あるセッションのデータを別のセッションに永続させたくはありません。データがロードされた後の処理に応じて、いくつかの重大な奇妙な結果が生じる可能性があります。例えば、古いデータを使用して擬似的な計算を実行することができ、ユーザは考えられない – mlegge

関連する問題