es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al seleccionar variables (con `varSelectInput`) y usar ggplot con Shiny (Error: `arg` debe ser un símbolo).

Estoy tratando de crear una aplicación Shiny que use esta función (hecha en R markdown):

“`{r}
ls_vs <- function(variable) {
dataset %>%
filter({{variable}} != 254.948530) %>%
filter({{variable}} != 121.738080) %>%
ggplot(mapping = aes(y = life_satisfaction, x = {{variable}})) +
geom_point(aes(color = region, shape = freedom_status), size = 2) +
geom_smooth(color = "cyan") +
labs(y = "Satisfacción de Vida", shape = "Estatus de Libertad", color = "Continente")
}

<pre><code><br />ls_vs(economic_freedom)

Estoy obteniendo los resultados deseados con esta función:

![Gráfico deseado](https://i.stack.imgur.com/SXSLD.png)

Ahora, aquí está mi intento de integrarlo en una aplicación Shiny:

La sección de la IU:

“`{r}
tabPanel(“Comparación de Factores”,

sidebarPanel(
varSelectInput(inputId = “variable”, label = “Selecciona el Factor a Comparar”, data = dataset),

mainPanel(
h1(“Test”),
plotOutput(“ls_vs”),
)
)),

Y aquí está la sección del servidor:

“`{r}

h1("Comparación de Factores")

output$ls_vs <- renderPlot({
dataset %>%
filter({{input$variable}} != 254.948530) %>%
filter({{input$variable}} != 121.738080) %>%
ggplot(mapping = aes(y = life_satisfaction, x = {{input$variable}})) +
geom_point(aes(color = region, shape = freedom_status), size = 2) +
geom_smooth(color = "cyan") +
labs(y = "Satisfacción de Vida", shape = "Estatus de Libertad", color = "Continente")
})
“`

Al intentar ejecutar la aplicación, estoy obteniendo el error:

Error

Error: arg debe ser un símbolo

¿He hecho algo incorrecto en el área de la IU o en el área del servidor? ¿Cómo se utiliza correctamente varSelectInput en Shiny para crear un gráfico interactivo donde se puede cambiar la variable para cambiar el gráfico?

¡Muchas gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código parece estar en varSelectInput en la sección UI. El argumento data en varSelectInput necesita especificar el conjunto de datos de donde se pueden seleccionar las variables, y no el conjunto de datos en sí. Además, varSelectInput necesita tener un inputId único, al cual se hace referencia en la sección server.

    Aquí hay una forma de modificar el código para corregir el error y hacer que la aplicación funcione:

    Sección UI:

    “`{r}
    tabPanel(“Comparación de factores”,

         sidebarPanel(
           varSelectInput(inputId = "xvar", label = "Seleccionar factor para comparar",
                          data = dataset, selected = "economic_freedom"),
    
           mainPanel(                                   
             h1("Test"),           
             plotOutput("ls_vs_plot")
           )   
         ))
    

    Sección server: ```{r} #Comparación de factores output$ls_vs_plot <- renderPlot({ ls_vs_input <- input$xvar dataset %>% filter({{ls_vs_input}} != 254.948530) %>% filter({{ls_vs_input}} != 121.738080) %>% ggplot(mapping = aes(y = life_satisfaction, x = {{ls_vs_input}})) + geom_point(aes(color = region, shape = freedom_status), size = 2) + geom_smooth(color = "cyan") + labs(y = "Satisfacción de vida", shape = "Estado de libertad", color = "Continente") })

    En el código modificado, hemos cambiado el inputId de varSelectInput a “xvar” y nos hemos referido a él como input$xvar en la sección server. También hemos especificado el valor predeterminado para el argumento selected en varSelectInput como “economic_freedom”.

    En la seccion server, hemos modificado el código para utilizar ls_vs_input como la variable seleccionada, que se extrae de input$xvar.

    Estas modificaciones deberían permitir que la aplicación funcione como se espera.

Comments are closed.