Automatischer Download mehrerer Dateien in R-Shiny

Ich versuche herauszufinden, wie man einen bekommtdata.frame um sich selbst zu unterteilen und dann eine CSV-Datei für jede Untergruppe zu schreiben. Ich schreibe eineshiny App, die Vorlagendateien für verschiedene Instrumente generiert, und ich muss in der Lage sein, eine Datei für jede Charge / Platte / was auch immer zu erhalten. Natürlich könnten wir eine manuelle Sortierung durchführen, aber diese Art der Sortierung ist gegen den Zweck gerichtet.

Angenommen, ich habe einedata.frame mit 4 Spalten mit den Namen 1) PlateID, 2) SampleName, 3) Well und 4) Comments und ich möchte die PlateID so festlegen, dass jede einzelne Platte eine eigene Datei hat.

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)
  }
}) 

Daher möchte ich einige Funktionen hinzufügen und bin mir nicht sicher, wie ich sie angehen soll. Erstens möchte ich eine bessere Kontrolle darüber haben, wo die Daten geschrieben werden. Ich möchte, dass es in dieselbe Datei wie meine Eingabedateien verschoben wird, bin mir jedoch nicht sicher, wie ich dies erzwingen soll. Ich habe versucht, etwas zu tun wie:

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

aber ininFile$datapath scheint ein temporärer Ordner / eine temporäre Datei zu sein, der / die generiert wird und keine direkte Verknüpfung zur Originaldatei ist!

Außerdem möchte ich etwas schreiben, das sich wie ein ... verhältdownloadHandler Im Sinne einer Schaltfläche, die die Dateien beim Klicken herunterlädt, aber ich glaube nicht, dass ich das in diesem Szenario verwenden kann, da ich mehrere Dateien schreibe. Wenn ich falsch liege, lassen Sie es mich bitte wissen, da dies das Leben leichter machen würde. Ich denke, dass ich eine verwenden werdeactionButton und eine Zählervariable, so dass der Zähler der Wert der Taste + 1 ist, bis die Taste aktiviert wird. In diesem Fall sind sie bis zum Ende der Funktion gleich. Natürlich hätte ich eine Bedingung, die den Rest erledigt, aber das ist trivial, also konzentrieren wir uns auf die Datei-Teilmenge und den Download!

Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage