Haga que conditionalPanel dependa de los archivos cargados con fileInput

Así que estoy tratando de hacer una aplicación shiny donde tengo un botón que solo aparece si los archivos han sido cargados; para esto estoy usando conditionalPanel.

ui.R:

require(shiny) shinyUI(pageWithSidebar( headerPanel("My App"), sidebarPanel( fileInput("files", "Choose file"), conditionalPanel( condition = "input.files", actionButton("submitFiles", "Submit files for processing"))), mainPanel(h3("Nothing to see here")) )) 

No creo que haya nada de qué preocuparse en mi servidor. R: dado que el ejemplo anterior no hace nada. Con la condición anterior, el botón nunca aparece, es decir, la condición nunca es verdadera.

Algunas cosas que he intentado para mi condición son input.files.length > 0 , input.files.size() > 0 , que dan como resultado que el botón esté presente antes de cargar un archivo. Supongo que esto se debe a que input $ files es un data.frame vacío antes de elegir archivos, por lo que tiene una longitud / tamaño distinto de cero, ¿verdad?

¿Qué condición puedo usar para ocultar el botón hasta que se haya terminado de cargar al menos un archivo?

Creo que otra opción sería reemplazar conditionalPanel con uiOutput y llamar a renderUI({actionButton(...)}) dentro de un bloque de observar / aislar en server.R que está viendo input.files ( if (nrow(input$files) < 1) return() ); ¿Es esa la única forma? Si puedo hacer esto de cualquier manera, ¿qué me haría escoger uno u otro (más allá de conditionalPanel da como resultado menos código)?

suspendWhenHidden realizar una salida reactiva devolviendo el estado de la carga y establecer la opción suspendWhenHidden de esta salida en FALSE .

Más precisamente, en server.R seguramente tiene una función reactiva, digamos getData() para hacer un dataframe del archivo cargado. Entonces haz esto:

  getData <- reactive({ if(is.null(input$files)) return(NULL) ...... }) output$fileUploaded <- reactive({ return(!is.null(getData())) }) outputOptions(output, 'fileUploaded', suspendWhenHidden=FALSE) 

Y en ui.R puedes usar conditionalPanel() haciendo:

 conditionalPanel("output.fileUploaded", ......