samedi 28 août 2021

How to use an if else function inside the server on a shiny app?

Hi again and thanks for reading me. I am working on an app with interactive graphics and I would like different graphics to be rendered for each case, but I am getting the following error:

Error : Can't access reactive value 'alumnos' outside of reactive consumer.
ℹ Do you need to wrap inside reactive() or observer()?

Anyone know what it could be? The app code is as follows:

library(readxl)
library(shiny)
library(echarts4r)
library(dplyr)
asistencias <- read_excel("/Users/jorge_hca/Desktop/nombres.xlsx", sheet = "Asistencias")
calificaciones <- read_excel("/Users/jorge_hca/Desktop/nombres.xlsx", sheet = "Calificaciones")


calificaciones <- calificaciones |> 
  mutate( `Promedio tareas` = rowMeans(calificaciones[2:(length(calificaciones)-3)  ]) )

calificaciones <- calificaciones |> 
  mutate( `Promedio examenes` = rowMeans( calificaciones[(length(calificaciones)-3):(length(calificaciones)-2)] ) )


calificaciones <- calificaciones |> 
  mutate(`Calificación final` = round( (`Promedio tareas`*0.3)+
                                    (`Promedio examenes`*0.7)+
                                    `Punto extra`, digits = 2 
                                        
                                        )
         )
calificaciones <- calificaciones |> 
  mutate(`Calificación actas` = round(`Calificación final`, digits = 0)
         )


lista <- data.frame(asistencias$Alumno)
lista <- rbind("Todos", lista)


ui <- fluidPage(
  
  selectInput("alumnos", "Selecciona a un alumno:",
              choices = lista$asistencias.Alumno
              ),
  echarts4rOutput("grafico")
)

server <- function(input, output){
  reactive({
    calificaciones <- calificaciones
  })
  output$grafico <- if (input$alumnos == "Todos"){
    renderEcharts4r(
      calificaciones() |> 
        e_charts() |> 
        e_histogram(`Calificación final`)
    )
  }else{
    renderEcharts4r(
      calificaciones() |> 
        e_charts() |> 
        e_histogram(calificaciones$`Tarea 2` )
    )
  }
  
}
shinyApp(ui, server)

Aucun commentaire:

Enregistrer un commentaire