2015-11-30 81 views
3

我在Shiny中使用renderTable來顯示數據集,我想爲表格做一些格式化。例如,如果我的代碼如下圖所示:如何格式化一個閃亮的renderTable?

ui.R:

shinyUI(fluidPage(
    titlePanel("Hello Shiny!"), 
    fluidRow( 
    column(4, 
    ... ... 
    )  
    ), 
    column(8, 
     tableOutput("mydata") 
    ) 
) 
)) 

server.R:

shinyServer(function(input, output) { 
df <- data.frame(A=1:10, B=11:20) 
output$mydata <- renderTable(df) 
}) 

這個例子只顯示了一個非常基本的表格。如果我想將表格寬度設置爲列寬的100%,而列A佔用表格寬度的70%並左對齊,則列B佔用表格寬度的30%並向右對齊,列名的背景顏色設置爲藍色,我如何使用renderTable來實現這一點?非常感謝您的幫助。

順便說一句,有沒有關於rendertable格式設置的任何文件,我可以參考?

回答

3

我不明白「將表格寬度設置爲列寬度的100%」是什麼意思,但您可能可以使用DT包實現您所需的內容。 https://rstudio.github.io/DT/和renderDataTable

例如(不執行對齊):

library(shiny) 
library (DT) 
df = data.frame(A=1:10, B=11:20) 

shinyApp(
    ui = fluidPage(DT::dataTableOutput('tbl')), 
    server = function(input, output) { 
    output$tbl = DT::renderDataTable(
     df, options = list(
     lengthChange = FALSE, 
     initComplete = JS(
      "function(settings, json) {", 
      "$(this.api().table().header()).css({'background-color': '#42f', 'color': '#fff'});", 
      "}"), 
     autowidth = TRUE, 
     columnDefs = list(list(width = '70%', targets = 1)) 
     ) 
    ) 
    } 
) 
+0

感謝菲利普。在我的ui.R中,我定義了輸出佈局的兩列,一列寬4,另8列。第二列顯示寬度爲8.通過使用基本代碼,表長度不佔用整列寬度,這就是我所說的「將表格寬度設置爲列寬度的100%」。在這種情況下,是否可以使用renderTable而不是renderDataTable來控制表格寬度?謝謝。 – Carter

+0

如果你真的想使用renderTable,請看這裏的文檔:http://shiny.rstudio.com/reference/shiny/latest/renderTable.html。這將向您指出其文檔處理對齊和寬度的xtable和print.xtable函數:http://www.inside-r.org/packages/cran/xtable/docs/xtable http://www.inside-r。 org/packages/cran/xtable/docs/print.xtable –

+1

我認爲飛利浦的答案是好的,ui.R代碼在表列之前打破了行的錯誤,這可能是爲什麼它不會擴展到預期的寬度。此外,table.dataTable的默認元素寬度爲100%。 –