Создание функций if с помощью флажков в R-shiny

#r #shiny

#r #блестящий

Вопрос:

В настоящее время я занимаюсь личным проектом, чтобы привыкнуть к использованию R-shiny. Я использую penguins набор данных в R. В этом проекте создается несколько разных графиков. Мне удалось создать основной код для отображения графиков, и теперь я пытаюсь использовать ввод флажка, чтобы позволить пользователю выбирать, хочет ли он, чтобы графики были разделены на исследуемые острова, или, скорее, просто видеть данные как таковые.

Мой код следующий.

 library("palmerpenguins")
library("shiny")
library("ggplot2")
penguins.data<- penguins
sum(is.na(penguins))
#As their are a few penguins with missing values (19 out of 2752) we decide to carry out the data visualization with
#Only the complete cases of the data

penguins.data<-na.omit(penguins.data)

#Making sure the categorical variables are factors
str(penguins.data)
penguins.data$species<-as.factor(penguins.data$species)
penguins.data$sex<-as.factor(penguins.data$sex)
penguins.data$year<-as.factor(penguins.data$year)
penguins.data$island<-as.factor(penguins.data$island)

#Defining the UI for the App.
ui <- fluidPage(
  #Adding a suitable title
  titlePanel("Penguin exploration"),
  #Getting the layout
  sidebarLayout(
    #Setting the panel for the used to select the inputs they want
    sidebarPanel(
      #Selecting the variable for the X-axis
      selectInput("horiz", "Select x-axis variable:",
                  c("Sex" = "sex",
                    "Species" = "species",
                    "Year" = "year"),
                 selected = "sex" ),
      
      
       #Selecting the variable in the Y-axis
      selectInput("vert", "Select y-axis variable:",
                  c("Bill Length" = "bill_length_mm",
                    "Bill Depth" = "bill_depth_mm",
                    "Flipper length" = "flipper_length_mm",
                    "Body mass" = "body_mass_g"),
                  selected = "flipper_length_mm" ),
      
     #We create the checkbox input for the user to select if they want to see the data in 
      checkboxInput("Divide", "check to look at how data is divided by Island Level", value = F)),
  
    
    mainPanel(
      #Setting a title for the output
      h3("plot"),
      
      #We decide how to name the plot to use it in the output
      plotOutput("PengPlot")
    ),
  )
)

server <- function(input, output) {
  
  horizontal<-reactive(input$horiz)
  vertical<-reactive(input$vert)
  
  
   output$PengPlot <- renderPlot({
     if(output$Divide){
       
     ggplot(data = penguins.data, aes_string(horizontal(), vertical())) 
     geom_boxplot(aes(fill= island)) 
       facet_wrap(~horizontal())
       
     }else{
       
       ggplot(data = penguins.data, aes_string(horizontal(), vertical())) 
         geom_boxplot()
     }
   })
  }
  


shinyApp(ui = ui, server = server)
 

В настоящее время я получаю сообщение об ошибке Reading from shinyoutput object is not allowed. , я не понимаю, что конкретно нужно делать. Я рассматриваю возможность создания обоих графиков как реактивных объектов, а затем использования функций if, но я видел в других сообщениях, что это может усложнить код.

Любой совет или помощь будут полезны. Заранее благодарю

Комментарии:

1. Ваше определение сервера содержит следующий код `if(вывод $ Divide) , while you probably mean if(ввод $Divide)`.

2. Да, спасибо, это была проблема. Я подумал, что все, что я должен был связать в функции if с выводом на сервере, а не с вводом в пользовательском интерфейсе.