rCharts с Highcharts как блестящее приложение

У меня блестящее приложение, состоящее из трех файлов. server.R, ui.R и файл для запуска приложения с

require(shiny)
require(rCharts)
runApp("shinyApp")

Приложение запускается, но сюжет не виден. Он работает с обычным r-сюжетом и с полихартами, но после долгих попыток у меня все еще нет успеха с rCharts (который включает в себя rHighcharts).

Это файлы последней попытки:

server.R:

library(rCharts)
shinyServer(function(input, output) {
  output$myChart <- renderChart({
    h1 <- Highcharts$new()
    h1$chart(type = "spline")
    h1$series(data = c(1, 3, 2, 4, 5), dashStyle = "longdash")
    h1$series(data = c(NA, 4, 1, 3, 4), dashStyle = "shortdot")
    h1$legend(symbolWidth = 80)
    return(h1)
  })
})

ui.R:

require(rCharts)
shinyUI(pageWithSidebar(
  headerPanel("rCharts: Highcharts"),
  sidebarPanel(
    selectInput(inputId = "x",
      label = "Choose X",
      choices = c('SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'),
      selected = "SepalLength")
    ),
  mainPanel(showOutput("myChart", "Highcharts")
  )
))

Я предполагаю, что второй аргумент "showOutput" может быть неправильным, но я ничего не нашел.

2 ответа

Решение

Есть два способа заставить это работать. Первый способ - добавить h1$set(dom = "myChart") в вашем server.R, Это необходимо для того, чтобы оба server.R а также ui.R общаемся о правильном графике. Альтернатива заключается в использовании renderChart2, который находится в dev филиал rChartsмодернизированная версия renderChart и в итоге заменит его. Я прилагаю весь код для всеобщего блага.

require(rCharts)
require(shiny)
runApp(list(
  ui =  pageWithSidebar(
    headerPanel("rCharts: Highcharts"),
    sidebarPanel(selectInput(
      inputId = "x",
      label = "Choose X",
      choices = c('SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'),
      selected = "SepalLength"
    )),
    mainPanel(showOutput("myChart", "Highcharts"))
  ),
  server = function(input, output){
    output$myChart <- renderChart2({
      h1 <- Highcharts$new()
      h1$chart(type = "spline")
      h1$series(data = c(1, 3, 2, 4, 5), dashStyle = "longdash")
      h1$series(data = c(NA, 4, 1, 3, 4), dashStyle = "shortdot")
      h1$legend(symbolWidth = 80)
      return(h1)
    })
  }
))

Скорее всего это связано с тем, что rcharts является javascript основанные на сильной несовместимости между R имена переменных и javascript допустимые имена переменных. В частности, что касается точек . в именах.

Попробуйте запустить следующую функцию на data.frame имена и любые character колонки:

noDot <- function(x)
   gsub("\\.", "_", gsub("^\\.", "", x) )

то есть:

names(df) <- noDot(names(df))
# and
char.cols <- sapply(df, function(x) any(is(x)=="character"))
df[, char.cols] <- sapply(df[, char.cols], noDot)
# note that this has not been tested
Другие вопросы по тегам