2016-12-06 29 views
1

クロステーブル出力(不測事態テーブル)を生成しています。私の要件は、行と列の合計と共に列のパーセンテージを持つことです。私はこのパッケージを見つけました"sjPlot"これは色の特徴で非常に良い出力を与え、私の要求を満たしていました。私はShinyで出力を生成するためにこのパッケージを使用しました。しかし私の驚いたことに、出力はアプリケーションではなくビューアペインでのみ生成されています。以下は私のコードの小さな部分です。クロス集計出力は、ビューアーペインにのみ表示され、Shinyアプリケーションでは表示されません。

library("shiny") 
library("sjPlot") 

ui <- shinyUI(fluidPage(
    tabPanel("First Page"), 
    mainPanel(tabsetPanel(id='mytabs', 
         tabPanel("Table",tags$b(tags$br("Table Summary")),tags$br(),dataTableOutput("crosstab2")) 
         ) 
      ) 
)) 


server <- shinyServer(function(input, output,session){ 
    updateTabsetPanel(session = session 
        ,inputId = 'myTabs') 

    output$crosstab2 <- renderDataTable({ 
     with(mtcars,sjt.xtab(mpg, cyl, 
         var.labels = c("mpg","cyl"), 
         show.col.prc = T, 
         show.summary = F, 
         show.na = F, 
         wrap.labels = 50, 
         tdcol.col = "#f90477", 
         emph.total = T, 
         emph.color = "#3aaee0", 
         #use.viewer = T ##when this is false it generates a html output. Can we capture the html output and display in Shiny? 
         CSS = list(css.table = "border: 1px solid;", 
            css.tdata = "border: 1px solid;")))  
    }) 

    print("created crosstab1")  
}) 

shinyApp(ui = ui, server = server) 

これにより、ビューアペインに必要な出力が生成されます。この出力をアプリに表示するにはどうすればよいですか?実際のプログラムで変数が動的に選択されているので、この出力を画像として保存することはできません。したがって、テーブル出力が変更されます。

+0

私は 'sjPlot'パッケージを使ったことがないので、単純にベースRにプロットすると、未使用の引数についてのエラーをどう扱っていますか? –

+0

@ Pork、上記のコードをr studioで実行しましたが、何のエラーもありません。出力はビューアーペインで生成され、Shinyアプリケーションでは生成されません – user1412

答えて

1

sjt.xtabは、ビューアに表示されるテーブルを生成するために使用されるhtmlとcssを含むリストを表示しません。

ui側にはhtmlOutputを、サーバー側にはrenderUIを使用して表示することができます。あなたのui.R

、あなたが使用することができます。

htmlOutput("crosstab2") 

をごserver.Rで:

output$crosstab2 <- renderUI({ 
    custom_table <- sjt.xtab(mtcars$mpg, mtcars$cyl,variableLabels = c("mpg","cyl"),showColPerc = T, 
          showSummary = F,showNA=F,highlightTotal = T,tdcol.col = "#f90477", highlightColor ="#3aaee0", 
          CSS = list(css.table = "border: 1px solid;", 
             css.tdata = "border: 1px solid;")) 
    HTML(custom_table$knitr) 
    }) 

はここ(の一部)私のsessionInfo()

R version 3.1.2 (2014-10-31) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 

locale: 
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] sjPlot_1.9.2 shiny_0.13.1 

私たちがいない容疑者同じバージョンのsjPlotを引数として持つあなたの例で使用しているsjt.xtabが名前を変更しました。

+0

あなたの答えは大変ありがとう!あなたは準備ができています:)はい、私のバージョンの** sjPlotは2.1.2ですので、引数が異なることがあります。私の理解のために、テーブルを生成しているのになぜrenderUIを使用するのかを確認してください。私は、テーブル出力を生成していることを考慮して、renderDataTableを使用していました。どのレンダリング機能を使うべきだと思いますか?次に、** sjt.xtab **がテーブルを生成するために使用されたhtmlとcssを含むリストを目に見えない形で返すことはどうでしたか?もう一度ありがとう! – user1412

+1

'renderDataTable'がデータフレームをレンダリングするために使われていますが、'?sjt.xtab'を見るとValue部分でデータフレームを返さないので、 'renderDataTable'は正しいレンダリング関数ではありません。関数はhtmlを返すので、適切な関数は 'renderUi' /' htmlOutput'です。私はコードを編集します、あなたはCSSを持っているので 'custom_table $ knitr'を直接使うことができます。 – NicE

+0

ありがとうございます!わかりました。これは動的変数の選択にも有効です。テーブルが更新されています! – user1412

関連する問題