Descarga automática de archivos múltiples en R-Shiny

Estoy tratando de averiguar cómo obtener unadata.frame para subconjuntarse y luego escribir un archivo .csv para cada subconjunto. Estoy escribiendo unshiny Aplicación que generará archivos de plantilla para diferentes instrumentos, y necesito poder obtener un archivo para cada lote / placa / lo que sea. Obviamente, podríamos hacer una clasificación manual, pero ese tipo de derrota el propósito.

En el ejemplo, digamos que tengo undata.frame con 4 columnas nombradas 1) PlateID, 2) SampleName, 3) Well y 4) Comentarios y quiero un subconjunto por el PlateID para que cada placa individual tenga su propio archivo.

output$multiDownload <- renderText({
#templateData() just loads the data, nothing special;
#If you wanna see it let me know, but I think it's bulky
  tempData <- templateData()
  if(is.null(tempData)){return(NULL)}

    #If there are more than one plate, subset by plate ID and write each file
    if(max(tempData$PlateID) > 1){
    for(i in 1:max(tempData$PlateID)){
        tempSubsetForWrite <- subset(tempData, tempData$PlateID == i, select =   c("names", "well", "comments"))
        write.csv(tempSubsetForWrite, file = paste0("file ", i, " of ", max(tempData$PlateID), row.names = FALSE)
      }
  } else {
    write.csv(tempData, file = "file", row.names = FALSE)
  }
}) 

Así que quiero agregar algunas características y no estoy seguro de cómo abordarlas. Primero, me gustaría tener un mejor control de dónde se escriben los datos. Me gustaría que entrara en el mismo archivo que mis archivos de entrada, pero no estoy seguro de cómo forzar esto. Intenté hacer algo como:

inFile <- input$templateGenerationFile
write.csv(tempData, paste0(inFile$datapath, "/file ", i, " of ", max(tempData$PlateID))

pero eninFile$datapath ¡Parece ser una carpeta / archivo temporal que se genera y no un enlace directo al archivo original!

Además, estoy deseando escribir algo que actuará como undownloadHandler en el sentido de tener un botón que descargará los archivos al hacer clic, pero no creo que pueda usar eso en este escenario porque estoy escribiendo varios archivos. Si estoy equivocado, por favor avíseme, ya que eso facilitaría la vida. Estoy pensando que voy a usar unactionButton y una variable de contador para que el contador sea el valor del botón + 1 hasta que se active el botón, en cuyo caso son iguales hasta el final de la función. Obviamente, tendría un condicional que se encarga del resto, pero eso es trivial, ¡así que nos centramos en el subconjunto de archivos y en la descarga!

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta