這是我有一天[R閃亮創建下拉菜單,我想弄清楚以下問題:假設我有一個像[R閃亮使用文件夾內容
/usr/data/
根目錄,此目錄可能包含一些文件夾(A,B,C,...)中每個文件夾都包含一些文件(文件夾中沒有文件夾,只有文件)。我打算根據另一個下拉菜單創建一個下拉菜單。使用從列表中選擇一個文件夾名稱,第二個下拉菜單會自動加載該文件夾中的文件名稱。例如,如果選擇文件夾A
並且它包含File1
和File2
,則第二個下拉列表將包含這兩個。這是我如何做它現在:
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("This is a test app"),
sidebarLayout(
sidebarPanel(
uiOutput("Box1"),
uiOutput("Box2")
),
mainPanel("Display results",
tableOutput("view"))
)
))
server.R
library(shiny)
biz = data.frame(
Folder = c("A", "A", "B" , "B"),
Filename = c("File1","File2","File3","File4"),
stringsAsFactors = FALSE
)
shinyServer(function(input, output) {
output$Box1 = renderUI(selectInput("folder","Select directory",c("None",unique(biz$Folder)),"None"))
output$Box2 = renderUI(
if (is.null(input$folder) || input$folder == "None"){return()
}else selectInput("filename",
"Select dataset",
c("None",unique(biz$Filename[which(biz$Folder == input$folder)])),
"None")
)
subdata1 = reactive(biz[which(biz$Folder == input$folder),])
subdata2 = reactive(subdata1()[which(subdata1()$Filename == input$filename),])
output$view = renderTable({
if(is.null(input$folder) || is.null(input$filename)){return()
} else if (input$folder == "None" || input$filename == "None"){return()
} else return(subdata2())
})
})
正如你所看到的,我使用一個數據幀照顧但如果這些文件夾的內容發生變化,這應該更好地動態化。所以我認爲最好的方法是獲取文件夾名稱列表,然後獲取該文件夾的內容並將它們加載到第二個下拉列表中。我曾嘗試過幾篇文章,但主要是關於csv文件的內容等等。任何幫助將非常感激。
感謝
我沒有足夠的聲望來投票你的答案,但謝謝你的詳細解釋。謝謝 – dagg3r