2017-10-31 15 views
0

sparkline 패키지를 사용하여 반짝이는 앱에서 datatable의 셀에 배치 할 막 대형 차트를 만듭니다. 나는 독립형 datatable에서 원하는 출력을 생성 할 수 있었지만 Shiny 응용 프로그램에 배치하면 작동하지 않습니다. spk_add_deps()이 htmlwidgets을 식별하는 방법과 관련이있을 수 있습니다. 내가 꽤 주위에 spk_add_deps() 함수를 이동하고 다양한 식별자를 전달 시도했는데 아무것도 효과가 없습니다.(많은) JavaScript를 사용하지 않고 Shiny 앱의 데이터 테이블 셀에 sparkline htmlwidget 포함

나는 여기에 기본적으로 같은 질문 Render datatable with sparklines in Shiny 을 발견했지만 주어진 솔루션은 (1) 콜백 함수에서 스파크의 자바 스크립트 코드를 작성합니다 (R sparkline() 기능을 갖는의 목적을 격파)에 의존하고 (2)를 스파크 라인이 뷰어에서 렌더링되면 자바 스크립트를 모두 작성하지 않고도 반짝이는 앱에서 렌더링 할 수는 없습니다. 나는 스파크의 막대 그래프가 나타나지 않는 자신의 데이터 테이블 렌더링 경우 지금

# Preliminary, load packages and build a demo table with the sparkline code merged in 
library(shiny) 
library(DT) 
library(data.table) 
library(sparkline) 

## Create demo data sets 
my_mtcars <- data.table(mtcars, keep.rownames = TRUE) 
names(my_mtcars)[1] <- 'car_id' 

set.seed(0) 
data_for_sparklines <- data.table(car_id = rep(my_mtcars$car_id, 5), 
            category = 1:5, 
            value = runif(160)) 

sparkline_html <- data_for_sparklines[, .(sparkbar = spk_chr(value, type = 'bar')), by = 'car_id'] 
my_mtcars <- merge(my_mtcars, sparkline_html, by = 'car_id') 

: 여기

데모의

spk_add_deps(datatable(my_mtcars, escape = FALSE)) 

datatable showing sparkline bar charts

을하지만 난에 같은를 포함하는 경우 반짝이는 열이 비어있는 앱 :

ui <- shinyUI(fluidPage(
    dataTableOutput('myTable') 
)) 

server <- shinyServer(function(input, output, session) { 
    output$myTable <- renderDataTable(spk_add_deps(datatable(my_mtcars, escape = FALSE))) 
}) 

shinyApp(ui = ui, server = server) 

enter image description here

+0

htmlwidgets는 설계된 JS 패키지에서만 작동하는 경향이 있습니다. 누군가 R에 DT + 스파크 라인 위젯을 특별히 만든 경우가 아니라면 운이 없다고 생각합니다. –

답변

0

htmlwidgets 패키지를 사용하여 해결책을 찾았습니다. HTMLwidgets staticRender()renderDataTable()에 콜백을 추가,

ui <- shinyUI(fluidPage(
    getDependency('sparkline'), 
    dataTableOutput('myTable') 
)) 

내가 완전히 이해하지 않는 이유 :

library(htmlwidgets) 

그리고 대신에 빛나는 UI 기능에 스파크 종속성을로드 할 수 spk_add_deps() 사용 getDependency()의 함수 :

server <- shinyServer(function(input, output, session) { 
    staticRender_cb <- JS('function(){debugger;HTMLWidgets.staticRender();}') 
    output$myTable <- renderDataTable(my_mtcars, 
            escape = FALSE, 
            options = list(drawCallback = staticRender_cb)) 
}) 

하지만 그게 전부예요. 반짝이는 ap 피.