2017-12-13 11 views
0

Shiny-Serverで実行中のR Shiny DataTableの大きなテーブルに問題があります。レンダリング後、ページが「再接続しようとしています」と点滅し、最終的にタイムアウトして接続が失われます。この現象は、Shiny-Serverに公開されたときに発生しますが、ローカルで起動されたときは、shiny::runApp()で発生しません。R Shiny DataTableは、Shiny-Server上の大きなテーブルに対して接続を失いますが、ローカルRunAppでは接続できません。

結果がわずか3列の500,000レコードのテストで問題が発生します。小さなテーブルでは、正常に動作します。

私はDT::パッケージに問題を切り分けました。 dataTableOutputrenderDataTableshiny::を使用すると問題なく動作します。しかし、それはDTによって提供されるすべての有用な機能に欠けている。問題が発生すると、DataTableのフィルタリングメカニズムはまだ動作しており、サーバー上で処理していますが、他の光沢のある関数は機能しません。

以下のコードエラーを再現することができます

library(shiny) 

df <- data.frame(num = rep(c(1,2,3,4,5,6,7,8,9,0), times=50000), 
       letters = rep(letters[1:10], times=50000), 
       colA = rep(c("apple","orange","pear","grape","onion"), times=100000)) 

ui <- navbarPage("DataTable test", id="nav", 

       tabPanel("Define Subset", 
          # Present Datatable 
          fluidRow(DT::dataTableOutput("mdu_subset_table"), style = "font-size: 85%; width: 100%") 
       ), 
       tags$head(
        includeCSS("styles.css") 
       ) 

) 


server <- function(input, output, session) { 
    # session$allowReconnect(TRUE) 

    output$mdu_subset_table <- DT::renderDataTable(
    {df} 
    , filter="top" 
    , options = list(sDom = '<"top">lrt<"bottom">ip', 
        lengthMenu = c(100,1000) 
        ) 
) 
} 

shinyApp(ui, server) 

シャイニーサーバー上のRのバージョンがある:Rバージョン3.4.1(2017年6月30日) - "シングルキャンドル"

ローカルにインストールされたライブラリと光沢のあるサーバーにインストールされたライブラリは同じです。

エラーが光沢のあるサーバー上のRのコンソールログに表示されます。

su: ignore --preserve-environment, it's mutually exclusive to --login. 

Listening on http://127.0.0.1:43761 
~                  
~        
~ 
~ 
~ 
+0

より多くを知らなくても、私の最初の考えは、テーブルの上に*サーバー側の処理*を使用することです。 [here](http://rstudio.github.io/DT/server.html)を読むと、render文に 'server = TRUE'を追加するだけで簡単にできます。ただし、ネットワークの遅延や関連性が示唆されるため、実際に問題が解決される場合もあります。 –

+0

ありがとう@KevinArseneau。サーバー側の処理はデフォルトで有効になっており、この例では使用されています。クライアント側の処理を使用しようとすると、テーブルが大きすぎるという簡単なエラーメッセージが表示されます。 –

答えて

0

output$mdu_subset_tableは、あなたの質問に不完全である、DT::datatableへの呼び出しはありません。

このブロックを次のコードに置き換えると、私の仕事になります。

output$mdu_subset_table <- DT::renderDataTable({ 

    DT::datatable(
    df, 
    filter = "top", 
    options = list(
     dom = "lrtip", 
     lengthMenu = c(100, 1000) 
    ) 
) 

}, server = TRUE) 

N.B. In your question you include sDom within the options list. I've not seen that used elsewhere and have replaced with a standard dom entry.

+0

ありがとうKevin。私はあなたの修正を試みましたが、光沢のあるサーバーで実行しても失敗します。 runApp()でうまく動作します。 sDomはDataTableの廃止予定の引数名です - domと同じものです。 –

+0

こんにちは@AlasdairDouglas、私は1M +の行と多くの列を使用して、生産の光沢のあるサーバー環境で同様のコードを使用していますが、サンプルデータセットは問題ありません。私は、DTパッケージがあなたの問題のどこにないのかを提案します。 –

+0

それはケビンに感謝します、ありがとう。光沢のあるサーバーに設定上の問題があるかもしれないと思うので、そこで実験する必要があります。 –

関連する問題