Хитрость заключается в том, чтобы избежать нестандартной оценки, потому что input$x
и input$y
оценивают строки, а при использовании plotly
, как в вашем примере, требуются имена столбцов после ~. Вы можете исправить это, например:
server <- function(input, output) {
dataset <- reactive({
df[, c(input$x, input$y)]
})
output$plot = renderPlotly({
plot_ly(x = dataset()[[input$x]], y = dataset()[[input$y]],type = 'scatter', mode = 'lines')
})
}
Дальнейшее улучшение может заключаться в том, чтобы «разделить» реактив на две части, так что входные данные графика становятся недействительными и пересчитываются только при изменении соответствующего ввода:
server <- function(input, output) {
dataset_x <- reactive({
df[, input$x]
})
dataset_y <- reactive({
df[, input$y]
})
output$plot = renderPlotly({
plot_ly(x = dataset_x()[[1]], y = dataset_y()[[1]], type = 'scatter', mode = 'lines')
})
}