2016-09-25 4 views
2

매우 간단한 문제가 있습니다. 조건부로 특정 셀에 색을 넣으려고합니다. shinyrenderTable. 어떤 이유로 아래의 방법은 한 셀 오른쪽으로 착색되고,뿐만 아니라 하나 개의 컬럼을 통해 행의 셀 추진 :Shiny Rendertable의 셀 색칠

test <- data.frame(test1 = c(1:3), test2 = c(4:6)) 
test[test$test1 == 1, "test1"] <- '<td style="background-color:red">' 

library(shiny) 

ui <- shinyUI(fluidPage(
    tableOutput("tt") 
    ) 
) 

server <- shinyServer(function(input, output) { 

    output$tt <- renderTable({ 
    test 
    }, sanitize.text.function = function(x) x) 
}) 

shinyApp(ui = ui, server = server) 

이 버그? HTML 출력을 검사했을 때 빈 <td> </td> 셀을 남기고 새로운 <td style="background-color:red">을 생성한다는 것을 알았습니다. 나는 또한 시도 :

test[test$test1 == 1, "test1"] <- '<td bgcolor="#FF0000">1</td>' 

이 다른 스타일 작동 :

R shiny color dataframe

이 작업이 너무 간단하다 : 나는 같은 더 복잡한 솔루션을 피하기 위해 노력하고

test[test$test1 == 1, "test1"] <- "<strong>1</strong>" 

? 정말 고맙습니다.

+0

오직 renderTable 만 사용하고 싶습니까? HtmlTable 또는 DT 일 수 있습니까? – Batanichek

+0

@Batanichek 간단하게하기 위해 renderTable을 고수하고 싶습니다. 할 수 없다면 다른 함수와 패키지를 사용할 수 있습니다 (DT는 테이블을 찾는 방법이므로 어쨌든 배워야합니다). – Tunn

답변

3

만 renerTable를 사용하여 수행 할 경우 td

예에 div를 추가 할 수 있습니다

(하지만 당신은 동일한 텍스트의 위치를 ​​실현하려 일부 CSS를 조작해야 할 수도 있습니다)

test <- data.frame(test1 = c(1:3), test2 = c(4:6)) 
test[test$test1 == 1, "test1"] <- '<div style="width: 100%; height: 100%; z-index: 0; background-color: green; position:absolute; top: 0; left: 0; padding:5px;"> 
<span>1</span></div>' 

library(shiny) 

ui <- shinyUI(fluidPage(
    tableOutput("tt"), 
    tags$head(tags$style("#tt td{ 
         position:relative; 
         }; 

         ")) 
) 
) 

server <- shinyServer(function(input, output) { 

    output$tt <- renderTable({ 
    test 
    }, sanitize.text.function = function(x) x) 
}) 

shinyApp(ui = ui, server = server) 

DT에서는 다음과 같이 할 수 있습니다.

test <- data.frame(test1 = c(1:3), test2 = c(4:6)) 

library(shiny) 
library(DT) 

ui <- shinyUI(fluidPage(
    DT::dataTableOutput("tt") 
) 
) 

server <- shinyServer(function(input, output) { 

    output$tt <- DT::renderDataTable({ 
    datatable(test)%>%formatStyle("test1",backgroundColor=styleEqual(1, "red")) 
    }) 
}) 

shinyApp(ui = ui, server = server) 

DT 버전에서 볼 수 있듯이 CSS 스타일은 필요 없습니다.

+0

정말 아름다워요. 매우 놀란이 방법은 전에 게시되지 않았습니다. – Tunn

+0

DT 변형이 추가되었습니다. – Batanichek