Я пытаюсь использовать selectInput для определения фасетов для ggplot, поэтому входными данными для facet_grid является строка или имя столбца. Один из вариантов — «none» (это не один из столбцов). Пример ниже работает до тех пор, пока «none», если он не выбран. Я борюсь с тем, как я могу определить параметры «none» как NULL.
Я пробовал следующее, но получаю следующую ошибку: «Ошибка: cols
должно быть NULL
или спецификацией vars()
».
v <- ifelse(rfacet() == "none", NULL, vars(!!rlang::sym(rfacet())))
# Module - facets options-------------------------------------------------------
#UI
plotOpt_rowfacet_UI <- function(id){
ns <- NS(id)
uiOutput(ns("ui_opt_rowfacet"))
}
#SERVER
plotOpt_rowfacet <- function(input, output, session, facet_choices="none"){
output$ui_opt_rowfacet <- renderUI({
ns <- session$ns
selectInput(inputId = ns("opt_rowfacet"), label = "Y-variable:",
choices = facet_choices,
selected = "none",
multiple = FALSE, selectize = FALSE)
})
return(reactive(input$opt_rowfacet)) #returns column name as string
}
library(shiny)
library(dplyr)
library(tidyverse)
ui <- fluidPage(
plotOpt_rowfacet_UI("test1"),
h4("facet selected ouput from module"),
verbatimTextOutput("y_out"),
plotOutput("plot")
)
server <- function(input, output, session){
rfacet <- callModule(module=plotOpt_rowfacet, id="test1", facet_choices= c("none", "mpg", "disp"))
output$y_out <- renderPrint({
str(rfacet())
})
#this works except if none is selected
#how can set to NULL if input="none"
output$plot <- renderPlot({
#v <- ifelse(rfacet() == "none", NULL, vars(!!rlang::sym(rfacet())))
p <- ggplot(mtcars, aes(x=wt, y=disp))+
geom_point()+
facet_grid(rows=vars(cyl), cols=vars(!!rlang::sym(rfacet())))
print(p)
})
}
shinyApp(ui, server)