Вывод кросс-таблицы отображается только на панели просмотра, а не в приложении Shiny

Я генерирую кросс-таблицу выходных данных (таблица сопряженности). Мое требование состоит в том, чтобы иметь проценты столбца вместе с итоговой строкой и столбцом Я нашел этот пакет "sjPlot", который дает очень хороший вывод с цветными функциями и отвечал моим требованиям. Я использовал этот пакет для генерации вывода в 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)

Это создает необходимый вывод на панели просмотра. Как я могу получить этот вывод отображается в приложении. Я не могу сохранить этот вывод в виде изображения, так как в моей реальной программе переменные выбираются динамически, и соответственно вывод таблицы.

1 ответ

Решение

sjt.xtabневидимо возвращает список, содержащий HTML и CSS, используемые для создания таблицы, которую вы видите в программе просмотра.

Ты можешь использовать 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 вы используете в своем примере изменили имена.

Другие вопросы по тегам