2016-12-06 8 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' 패키지를 사용한 적이 없으므로 사용하지 않은 인수에 대한 오류를 어떻게 처리 할 것인가? –

+0

@ Pork, 위의 코드를 r studio에서 실행했지만 오류가 발생하지 않았습니다. 출력은 뷰어 창에서 생성되고 반짝이는 응용 프로그램에서는 생성되지 않습니다 – 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'를 보면 값 부분에서 데이터 프레임을 반환하지 않는다는 것을 알 수 있습니다. 따라서'renderDataTable'이 올바른 렌더링 기능이 아닙니다. 함수는 html을 반환하므로 올바른 함수는'renderUi' /'htmlOutput'입니다. 나는 코드를 편집한다. CSS가 inlince를 가지고 있기 때문에'custom_table $ knitr'을 직접 사용할 수있다. – NicE

+0

감사합니다! 이해 했어. 이것은 동적 변수 선택에도 적용됩니다. 테이블이 업데이트되고 있습니다 !! – user1412