我用shinyDirChoose
保存了用戶定義文件夾的路徑。現在我想從該用戶的文件夾上傳文件,但我無法弄清楚如何去做。 1)所有在服務器端? 2)以某種方式將文件路徑送入fileInput
?r shiny - 將shinyDirChoose文件夾中的所有文件上傳到服務器
這是我如何構建應該上傳的三個文件的文件路徑。
### ui end, to browse to desired folder
ui = fluidPage(shinyDirButton('directory', 'Folder select', 'Please select a folder'))
### extracting the folder path
server = function(input, output, session) {
volumes <- getVolumes()
shinyDirChoose(input, 'directory', roots=volumes, session=session)
path1 <- reactive({
return(print(parseDirPath(volumes, input$directory)))
})
### constructing the 3 file paths
datpat <- renderText({
req(nchar(path1())>0)
datpat <- paste0(path1(),"/data.csv")
})
vispat <- renderText({
req(nchar(path1())>0)
vispat <- paste0(path1(),"/visit.csv")
})
statpat <- renderText({
req(nchar(path1())>0)
statpat <- paste0(path1(),"/statvisit.csv")
})
所以現在我有這些路徑,但是我怎樣才能使用它們將相關內容上傳到服務器?不幸的是,一個簡單的read.csv
沒有辦法。
編輯 - 但現在還沒有...
與提供很大的幫助@SBista進一步的工作,我想我接近我的目標,但看到下面的代碼...
volumes <- getVolumes()
shinyDirChoose(input, 'directory', roots=volumes, session=session)
path1 <- reactive({
return(print(parseDirPath(volumes, input$directory)))
})
observe({
if(!is.null(path1)){
### vis1
vis1 <- reactive({
datpat <- paste0(path1(),"/visit.csv")
vis <- read.csv(datpat, header = input$header, sep = input$sep, quote = input$quote,
stringsAsFactors = FALSE)
vis
})
### dataruw1
dataruw1 <- reactive({
datpat <- paste0(path1(),"/data.csv")
dataruw <- read.csv(datpat, header = input$header, sep = input$sep, quote = input$quote,
stringsAsFactors = FALSE)
dataruw
})
}
})
不幸的是,dataruw1
和vis1
似乎沒有生成,因爲當我嘗試使用dataruw1()
和vis1()
的實際數據時,出現'找不到函數'錯誤。我錯過了什麼?任何想法?提前感謝!
嘗試在服務器函數啓動時聲明'reactiveValue'並在讀取它時分配值。編輯代碼的問題在於''反應表達式'的範圍在'if'條件內是有限的。 – SBista
是否已將此「將shinyDirChoose文件夾中的所有文件上載到服務器」處理? – RanonKahn
@RanonKahn我只能說下面的答案(或者說是第二個答案中的評論)符合我的需求...... –