Das ist mein Tag mit R glänzend ist und ich versuche, die folgende Frage, um herauszufinden: unter der Annahme, dass ich ein Stammverzeichnis habe wier glänzend Inhalt Dropdown-Menü Ordner erstellen
/usr/data/
könnte Dieses Verzeichnis enthält einige Ordner (A, B, C, ...), in denen jeder Ordner einige Dateien enthält (keine Ordner darin und nur Dateien). Ich plane, ein Dropdown-Menü basierend auf einem anderen Dropdown-Menü zu erstellen. Die Verwendung wählt einen Ordnernamen aus der Liste und das zweite Dropdown-Menü wird automatisch mit den Dateinamen in diesem Ordner geladen. Wenn zum Beispiel der Ordner A
ausgewählt ist und File1
und File2
enthält, enthält das zweite Dropdown diese beiden. Dies ist, wie ich es jetzt tue:
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())
})
})
Wie Sie sehen können, bin ich ein Datenrahmen mit kümmern das sollte aber besser dynamisch sein, falls sich der Inhalt dieser Ordner ändert. Also denke ich, dass der beste Weg ist, eine Liste von Ordnernamen zu haben und dann den Inhalt dieses Ordners zu holen und sie in das zweite Dropdown-Menü zu laden. Ich habe mehrere Beiträge auf SO versucht, aber sie sind meist über den Inhalt einer CSV-Datei und so weiter. Jede Hilfe würde sehr geschätzt werden.
Dank
Ich habe nicht genug Ruf, um Ihre Antwort zu bewerten, aber danke für die ausführliche Erklärung. Vielen Dank – dagg3r