#r #ggplot2 #shiny
#r #ggplot2 #блестящий
Вопрос:
Я пытаюсь создать разные ggplots из пользовательского ввода, в зависимости от того, хочет ли пользователь, чтобы фасеты и / или переменная были окрашены. Однако мне нужно проверить, является ли пользовательский ввод varSelectInput пустым или нет, чтобы сделать это. Мой код приведен ниже, начиная с получения пользовательского ввода, затем получения индексов столбцов для передачи в ggplot2 и, наконец, проверки того, какой из четырех входных данных (ось x, ось y, столбец фасетов и столбец цветов) пользователь хочет использовать. Пользователю необходимо нажать кнопку «Построить», чтобы построить график.
output$descrxaxis_Variable <- renderUI({
varSelectInput(inputId = "descrxaxis", label = "Choose x axis variable", data = descrDataMelted_selVars$df)})
output$descryaxis_Variable <- renderUI({
varSelectInput(inputId = "descryaxis", label = "Choose y axis variable", data = descrDataMelted_selVars$df,
multiple = TRUE, selectize = TRUE)})
output$descrFacet_Variable <- renderUI({
varSelectInput(inputId = "descrfacet", label = "Choose facet variable", data = descrDataMelted_selVars$df,
multiple = TRUE, selectize = TRUE)})
output$descrColor_Variable <- renderUI({
varSelectInput(inputId = "descrcolor", label = "Choose color variable", data = descrDataMelted_selVars$df,
multiple = FALSE, selectize = TRUE)})
x_ind <- reactiveValues(val = NULL)
observeEvent(input$descrxaxis, {
x_ind$val <- which(colnames(descrDataMelted_selVars$df) == input$descrxaxis)})
y_ind <- reactiveValues(val = NULL)
observeEvent(input$descryaxis, {
y_ind$val <- which(colnames(descrDataMelted_selVars$df) == input$descryaxis)})
facet_ind <- reactiveValues(val = NULL)
observeEvent(input$descrfacet, {
facet_ind$val <- which(colnames(descrDataMelted_selVars$df) == input$descrfacet)})
color_ind <- reactiveValues(val = NULL)
observeEvent(input$descrcolor, {
color_ind$val <- which(colnames(descrDataMelted_selVars$df) == input$descrcolor)})
observeEvent(input$descrBtnPlot,{
if (!is.null(x_ind) amp; !is.null(y_ind) amp; is.null(facet_ind) amp; is.null(color_ind)){
req(x_ind$val)
req(y_ind$val)
p <- ggplot(descrDataMelted_selVars$df, aes_string(x = colnames(descrDataMelted_selVars$df)[x_ind$val], y = colnames(descrDataMelted_selVars$df)[y_ind$val])) geom_point()}
if (!is.null(x_ind) amp; !is.null(y_ind) amp; is.null(facet_ind) amp; !is.null(color_ind)){
req(x_ind$val)
req(y_ind$val)
p <- ggplot(descrDataMelted_selVars$df, aes_string(x = colnames(descrDataMelted_selVars$df)[x_ind$val], y = colnames(descrDataMelted_selVars$df)[y_ind$val],
color = colnames(descrDataMelted_selVars$df)[color_ind$val])) geom_point()}
if (!is.null(x_ind) amp; !is.null(y_ind) amp; !is.null(facet_ind) amp; is.null(color_ind)){
req(x_ind$val)
req(y_ind$val)
p <- ggplot(descrDataMelted_selVars$df, aes_string(x = colnames(descrDataMelted_selVars$df)[x_ind$val], y = colnames(descrDataMelted_selVars$df)[y_ind$val])) geom_point()
facet_wrap(eval(expr(~!!ensym(colnames(descrDataMelted_selVars$df)[facet_ind$val]))))
output$descrSummaryStatsPlot <- renderPlotly(ggplotly(p))}
})
Что мне нужно изменить, чтобы иметь возможность определить, являются ли facet_ind и / или color_ind пустыми? Я перепробовал кучу разных способов, но ничего не сработало. Спасибо.
Комментарии:
1. Пожалуйста, опубликуйте минимально воспроизводимый пример с некоторыми примерами данных.
2. Я заставил его работать с помощью selectInput, но я чувствую, что это хак. Как говорится, «должен быть лучший способ!».
Ответ №1:
Если вы используете RStudio, есть действительно удобный инструмент отладки, который вы можете использовать для Shiny, если вы вызываете browser()
.
Если вы просто пытаетесь проверить, какие значения facet_ind
и color_ind
, затем поместите browser()
прямо перед этой строкой кода, а затем запустите свое приложение. Когда вы запускаете свое приложение, вы должны ввести инструмент отладки в RStudio, и вы должны иметь возможность выполнять код построчно, и в RStudio должна быть панель, где вы можете увидеть, какие значения ваших переменных находятся после каждой строки кода.
Смотрите здесь для получения более подробной информации: https://support.rstudio.com/hc/en-us/articles/205612627-Debugging-with-RStudio