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" может быть неправильным, но я ничего не нашел.
Ответы
Ответ 1
Есть два способа заставить это работать. Первый способ - добавить 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)
})
}
))
Ответ 2
Это, скорее всего, связано с тем, что 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