Автоматическая загрузка нескольких файлов в R-Shiny
Я пытаюсь выяснить, как получитьdata.frame
подмножество себя, а затем написать файл .csv для каждого подмножества. Я пишуshiny
приложение, которое будет генерировать файлы шаблонов для различных инструментов, и мне нужно иметь возможность получить файл для каждой партии / пластины / что угодно. Очевидно, что мы могли бы выполнить ручную сортировку, но это побеждает цель.
Например, скажем, что у меня естьdata.frame
с четырьмя столбцами с именем 1) PlateID, 2) SampleName, 3) Well и 4) Комментарии, и я хочу установить под PlateID так, чтобы каждая отдельная пластина имела свой собственный файл.
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)
}
})
Поэтому я хочу добавить несколько функций, и я не знаю, как к ним подойти. Во-первых, я хотел бы лучше контролировать, куда записываются данные. Я хотел бы, чтобы он входил в тот же файл, что и мои входные файлы, но я не уверен, как заставить это? Я пытался сделать что-то вроде:
inFile <- input$templateGenerationFile
write.csv(tempData, paste0(inFile$datapath, "/file ", i, " of ", max(tempData$PlateID))
но вinFile$datapath
представляется временная папка / файл, который создается, а не прямая ссылка на оригинальный файл!
Кроме того, я хочу написать что-то, что будет действовать какdownloadHandler
в смысле наличия кнопки, которая будет загружать файлы при нажатии, но я не думаю, что смогу использовать это в этом сценарии, потому что я пишу несколько файлов. Если я не прав, ПОЖАЛУЙСТА, дайте мне знать, так как это облегчит жизнь. Я думаю, что я буду использоватьactionButton
и переменную счетчика, так что счетчик равен значению кнопки + 1 до тех пор, пока кнопка не будет активирована, и в этом случае они равны до конца функции. Очевидно, у меня было бы условие, которое обрабатывает остальное, но это тривиально, поэтому давайте сосредоточимся на подмножестве файлов и загрузим!
Спасибо!