product() в geom_mosaic() не принимает реактивные входы на R Shiny?
Я играю с geom_mosaic()
функция (часть ggmosaic
пакет) на R Shiny и придумал проблему, которую я пытался решить в течение нескольких дней.
Сначала несколько примеров данных:
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
Кажется, что geom_mosaic()
не принимает реактивные входы на Shiny, то есть код 1 (ниже) работает нормально на консоли R, но код 2 (эквивалент R Shiny) не работает, выдавая следующее сообщение об ошибке:
Ошибка: объект ______ не найден
Код 1 (geom_mosaic отлично работает на консоли):
library(tidyverse)
library(ggmosaic)
selected_var1 <- "var1"
selected_var1_dat <- df[[selected_var1]]
selected_var2 <- "var2"
selected_var2_dat <- df[[selected_var2]]
ggplot(data = df) +
geom_mosaic(aes(x = product(selected_var1_dat),
fill = selected_var2_dat, na.rm = T))
Выведите ggplot (все выглядит хорошо):
Код 2 (теперь для реализации в Shiny):
library(shiny)
library(tidyverse)
library(ggmosaic)
varOptions <- c("var1", "var2", "var3")
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "selected_var1",
label = "X:",
choices = varOptions),
selectInput(inputId = "selected_var2",
label = "Y:",
choices = varOptions)
),
mainPanel(
plotlyOutput(outputId = "mosaic")
)
)
)
server <- function(input, output) {
output$mosaic <- renderPlotly({
selected_var1 <- input$selected_var1
selected_var1_dat <- df[[selected_var1]]
selected_var2 <- input$selected_var2
selected_var2_dat <- df[[selected_var2]]
ggplot(data = df) +
geom_mosaic(aes(x = product(selected_var1_dat),
fill = selected_var2_dat, na.rm = T))
})
}
shinyApp(ui = ui, server = server)
Который выводит это сообщение об ошибке:
Я пробовал разные способы, чтобы попытаться обойти эту проблему без удачи. Я работал с Shiny довольно много, и, похоже, работает с каждым ggplot
график, который я использовал. У кого-нибудь есть идеи о том, что может происходить?
1 ответ
Я не совсем понял это, но ваше приложение работает хорошо, если вы:
- Запустите код, предшествующий части пользовательского интерфейса / сервера
- Войти
selected_var1_dat = df[["var1"]]
а такжеselected_var1_dat = df[["var2"]]
в консоли - Запустите приложение
Таким образом, проблема заключается в том, что в коде вашего сервера, selected_var1_dat <- df[[selected_var1]]
не дает результата, что говорит о том, что selected_var1 <- input$selected_var1
не дает результата.
ggmosaic
а также plotly
в настоящее время не совместимы. Вы можете заставить свое приложение работать без сюжета с помощью следующего кода.
library(shiny)
library(tidyverse)
library(ggmosaic)
#library(plotly)
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "selected_var1",
label = "X:",
choices = names(df)[-1]),
selectInput(inputId = "selected_var2",
label = "Y:",
choices = names(df)[-1])
),
mainPanel(
plotOutput(outputId = "mosaic")
)
)
)
server <- function(input, output) {
output$mosaic <- renderPlot({
ggplot(data = df) +
geom_mosaic(aes(x = product(!!sym(input$selected_var1)),
fill = !!sym(input$selected_var2)))
})
}
shinyApp(ui = ui, server = server)