/ / Slow grep () dentro de programa brillante - r, brillante

Grep lento () dentro de un programa brillante - r, brillante

He construido una aplicación brillante que se encuentra en la URL a continuación.

https://hdoran.shinyapps.io/openAnalysis/

En la pestaña llamada "Elegir datos abiertos de CrossFit", tengo una función textInput () que llama a una función que usa grep (), que se usa para buscar nombres en un marco de datos.

La primera vez que el programa se carga y un nombre esingresado, la búsqueda aparentemente ocurre rápidamente y los nombres son devueltos. Sin embargo, cuando borro el nombre y escribo un segundo nombre, la búsqueda parece ser muy lenta.

¿Hay algo que pueda hacer para optimizar esto para que se realice rápidamente siempre?

Sigo siendo bastante nuevo en "bright" y no estoy seguro de que hacerlo de alguna manera una expresión reactiva ayudaría. Si es así, no estoy seguro de cómo.

Gracias por adelantado.

La parte relevante del código en el archivo ui.R

textInput("name", label = "Enter an athlete name and find your scores",
value = "Enter Name Here")

y la parte relevante del código en el archivo server.R es

output$myScores <- renderPrint({
df <- filedata()
df[grep(input$name, df$Competitor),]
})

Y esta parte también se encuentra en el archivo ui.R (aunque no estoy seguro de que sea relevante para el problema)

verbatimTextOutput("myScores"),

Respuestas

0 para la respuesta № 1

Si entiendo su objetivo correctamente, usted quiere darle al usuario la posibilidad de seleccionar una variable de entrada basada en la búsqueda de un competitor columna de la trama de datos llamada por filedata()? Si es así, selectizeInput() es lo que está buscando, utilizando la selección del lado del servidor como se describe aquí.

Adaptado al código que proporcionó:

ui.r

selectizeInput("name", choices = NULL, multiple = FALSE)

servidor.r

updateSelectizeInput(session, "name", choices = filedata()$competitor, server = TRUE)

output$myScores <- renderPrint({
df <- filedata()
subset(df, competitor==input$name)
})