2017-03-01 8 views
0

私は光沢のあるサーバーを使って私のサーバーに1つの光沢のあるアプリケーションを配備しました。サンプルの例を以下に示します。すべてのパッケージがロードされるまでメッセージを表示

をui.R

#library(shinyjs) 
library(shiny) 

#filenames <- list.files(path = "data",pattern="\\.csv$") 
#names(filenames) <- gsub(pattern = "\\.csv$", "", filenames) 
shinyUI(fluidPage(
    titlePanel(
    headerPanel( 
     h3("Testing....", 
     align="center", style="bold") 
    ) 
    ), 
    br(), 
    br(), 
    #useShinyjs(), ## initialize shinyjs to reset input files. 
    sidebarLayout(
    sidebarPanel(
     h5("Upload Data Files",style="bold"), 
     fileInput("files", 
       "Choose CSV/txt processed files or raw files", 
       multiple = "TRUE", 
       accept=c('text/csv', 
'text/comma-separated-values, 
text/plain', '.csv','.cel','.TXT','.txt')), 
#selectInput('dataset',"Choose platform annotation file", c("Please select a file" ='',filenames)), 
fluidRow(
    column(5, 
     radioButtons("radio", label = h5("Data uploaded"), 
         choices = list("Affymetrix" = 1, "Codelink" = 2, 
            "Illumina" = 3),selected = NULL) 
     ) 
), 
fluidRow(
    column(10, 
     h5("Differential Expression Call", style = "bold"), 
     checkboxInput("checkbox", 
         label = "Differential Expression", value = FALSE))), 
br(), 
uiOutput('AnnotationFile')), 
mainPanel(      
    tabsetPanel(id = "MamgedTabs", 
       tabPanel("Source-data", dataTableOutput("sourced")), 
       tabPanel("Annotation-data",dataTableOutput("annotation")) 
      ) 
) 
) 
) 
) 

server.R

#library(gcrma) 
#library(hgu133a.db) 
#library(hgu133acdf) 
#library(hgu133plus2.db) 
#library(hgu133plus2cdf) 
#library(hgu133a2frmavecs) 
#library(hgu133b.db) 
#library(hgu133bcdf) 
#library(hgu219.db) 
#library(hgu219cdf) 
#library(hgu95a.db) 
#library(hgu95acdf) 
#library(org.Hs.eg.db) 
#library(hgu133a2.db) 
#library(hgu133a2cdf) 
#library(hgu95av2.db) 
#library(hgu95av2cdf) 
#library(hgu133plus2cdf) 
#library(affyPLM) 
##library(makecdfenv) 
#library(parallel) 
#library(base) 
#library(S4Vectors) 
#library(IRanges) 
#library(stats4) 
#library(BiocInstaller) 
#library(Biobase) 
#library(BiocGenerics) 
#library(BiocParallel) 
#library(biomaRt) 
#library(Biostrings) 
#library(preprocessCore) 
#library(affyio) 
#library(zlibbioc) 
#library(graphics) 
#library(grDevices) 
#library(methods) 
#library(genefilter) 
#library(stats) 
#library(AnnotationDbi) 
#library(utils) 


## Defining the size of file to be accepted. Here it can accept any size. 
options(shiny.maxRequestSize= -1) 

shinyServer(function(input, output,session) { 
    filenames <- list.files(path = "data", pattern="\\.txt$") 
    names(filenames) <- gsub(pattern = "\\.txt$", "", filenames) 


    ## Dropdown box for chosing and loading annotation file 
    output$AnnotationFile = renderUI({ 
    if(!input$checkbox | (input$checkbox == T && input$radio != 2)){ 
     wellPanel(
     h5("Upload Annotation File"), 
     selectInput('dataset', "Choose platform annotation file", 
        c("Please select a file" = '', filenames), multiple = TRUE)) 
    } 
    }) 
}) 

あなたがserver.Rで見たように、私は、ロードするために多くのパッケージが必要それには時間がかかる。コード

output$AnnotationFile = renderUI({ 
    if(!input$checkbox | (input$checkbox == T && input$radio != 2)){ 
     wellPanel(
     h5("Upload Annotation File"), 
     selectInput('dataset', "Choose platform annotation file", 
        c("Please select a file" = '', filenames), multiple = TRUE)) 
    } 
    }) 

下記非表示に何かある示すことである、なぜならそれは、パッケージをロードするのに要する時間を、表示されるまでしばらく時間がかかりますが、時にはそれがまったく表示されません。

1)私のアプリケーションはローカルで正常に動作しますが、サーバにデプロイするとこの動作を示します。何らかの理由?

2)すべてのパッケージを読み込むまで、アプリケーションが準備しているというメッセージをメインパネルに表示するにはどうすればよいですか。

編集:私はshinyServer()内のメッセージを表示することができますが、それは(何度も繰り返して、すべてのパッケージをロードします)、しかし、私が表示され、開始時にすべてのパッケージをロードする各セッションのためであります応用。言い換えれば、shinyServer()の外側で進行メッセージを表示する方法を教えてください。

+0

'renderPrint'はあなたとその内部であなたのメッセージを表示する' print'メソッドを使うのに便利です。 –

+0

'shinysky'パッケージから' busyIndi​​cator'を使うことができます。詳細については、このリンクに従ってください。(https://github.com/AnalytixWare/ShinySky) – SBista

答えて

1

、あなたのアプリケーションが待機する場合すべてのパッケージがロードされるまで、ui.Rにすべてのパッケージを入れるだけでよいのは、ui.Rserver.Rより前に実行されているためです。したがって、すべてのパッケージをui.Rの先頭に置くことができます。アプリケーションが起動すると、それは例えば

、あなたが ui.Rでコーディングされているインターフェイスを表示する前にすべてのパッケージをロードします
#library(gcrma) 
#library(hgu133a.db) 
#library(hgu133acdf) 

shinyUI(fluidPage(
# your code... 
) 
) 

あなたはserver.Rでパッケージを使用しているとして、それはアプリケーション(ui.R部分)が表示されます、内部的にはすべてのパッケージがロードされますが、それはユーザーが知り得ないほどの時間がかかり、最終的にはアプリケーションの作業について混乱を招く可能性があります。そのようなことを避けるためには、ui.Rがパッケージを用意する良い選択肢です。

1

多分、進捗インジケータまたはモーダルダイアログが必要なのでしょうか?ここで

UPDATE 2

30 Rパッケージ、1行につき1つのテキストファイルを読み込むためのプログレスバーの精巧な使用である:

# server.R 
options(shiny.maxRequestSize = -1) 
shinyServer(function(input, output, session) { 
    withProgress(message = "Please wait", value = 0, expr = { 
    for (i in 1:30) { 
     source(textConnection(readLines("packages.txt", warn = FALSE)[i])) 
     incProgress(amount = 1/30, detail = paste0("Loading package ", i, "/30")) 
     Sys.sleep(time = 0.1) 
    } 
    }) 

    filenames <- list.files(path = "data", pattern = "\\.txt$") 
    names(filenames) <- gsub(pattern = "\\.txt$", "", filenames) 

    output$AnnotationFile <- renderUI({ 
    if (!input$checkbox | (input$checkbox == T && input$radio != 2)) { 
     wellPanel(
     h5("Upload Annotation File"), 
     selectInput('dataset', "Choose platform annotation file", c("Please select a file" = '', filenames), multiple = TRUE) 
    ) 
    } 
    }) 
}) 
+0

ありがとうございます。 'server.R'の中で、observeまたはprogressインジケータの中に' library() 'を入れると、パッケージはロードされていません – AwaitedOne

+0

あなたの努力に感謝しますが、 'shinyServer(function(input、output、session){.....})'を実行する前に光沢のあるパッケージが読み込まれています。すべてがロードされるまで、メッセージは表示されません。 – AwaitedOne

+0

それは私のためにローカルに動作します。コードはあなたのために働かないのですか? – jsb

関連する問題