product () в geom_mosaic () не принимает реактивные входы на R Shiny? - PullRequest
0 голосов
/ 02 марта 2019

Я играю с функцией 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 (все выглядит хорошо): Output ggplot (everything looks good)

Код 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) 

, который выводит это сообщение об ошибке: Which outputs this error message.

Я пробовал разные способы обойти эту проблему без удачи.Я немного поработал с Shiny, и, похоже, он работает с любым другим ggplot графиком, который я использовал.У кого-нибудь есть идеи о том, что может происходить?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

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) 
0 голосов
/ 02 марта 2019

Я до конца не понял, но ваше приложение работает хорошо, если вы:

  1. Запустите код , предшествующий пользовательский интерфейс / серверная часть
  2. Введите selected_var1_dat = df[["var1"]] и selected_var1_dat = df[["var2"]] в консоли
  3. Запустите приложение

Таким образом, проблема заключается в том, что в коде вашего сервера, selected_var1_dat <- df[[selected_var1]] не дает результата, который предполагаетчто selected_var1 <- input$selected_var1 не дает результата.

...