Библиотека, в которую вы входите, была построена с помощью оптимизационных и отладочных символов (скорее всего, -g -O2
, который по умолчанию для сборников Linux).
Отладка оптимизированного кода несколько сложна, поскольку поток управления оптимизация заставляет код «прыгать», некоторые переменные становятся «<optimized out>
» и т. д.
Вы можете перестроить библиотеку с помощью CXXFLAGS = -g -O0
, или вы можете научиться отлаживать при оптимизации.
Последнее очень полезное умение, так как много раз ваша программа будет только сбой в оптимизированном режиме, и вам все равно придется отлаживать его в этом режиме.
Вы можете поместить свою переменную b_alt в первую серию в качестве дополнительной информации:
hc_add_series(name = "c", additionalInfo = a$b_alt, data = a$c) %>%
Тогда вы можете найти эту переменную AdditionalInfo в объекте первой серии здесь :
event.point.series.chart.series[0].options.additionalInfo[event.point.index]
Весь код :
library("shiny")
library("highcharter")
ui <- shinyUI(
fluidPage(
column(width = 8, highchartOutput("hcontainer", height = "500px")),
column(width = 4, textOutput("text"))
)
)
server <- function(input, output) {
a <- data.frame(b = LETTERS[1:10], b_alt = LETTERS[11:20], c = 11:20, d = 21:30, e = 31:40)
output$hcontainer <- renderHighchart({
canvasClickFunction <- JS("function(event) {Shiny.onInputChange('canvasClicked', [this.name, event.point.series.chart.series[0].options.additionalInfo[event.point.index]]);}")
legendClickFunction <- JS("function(event) {Shiny.onInputChange('legendClicked', this.name);}")
highchart() %>%
hc_xAxis(categories = a$b) %>%
hc_add_series(name = "c", additionalInfo = a$b_alt, data = a$c) %>%
hc_add_series(name = "d", data = a$d) %>%
hc_add_series(name = "e", data = a$e) %>%
hc_plotOptions(series = list(events = list(click = canvasClickFunction, legendItemClick = legendClickFunction))) %>%
hc_chart(type = "column")
})
makeReactiveBinding("outputText")
observeEvent(input$canvasClicked, {
outputText <<- paste0("You clicked on series ", input$canvasClicked[1], " and the bar you clicked was from category ", input$canvasClicked[2], ".")
})
observeEvent(input$legendClicked, {
outputText <<- paste0("You clicked into the legend and selected series ", input$legendClicked, ".")
})
output$text <- renderText({
outputText
})
}
shinyApp(ui, server)