是否可以在R闪亮中链接选择输入控件。我目前有一个下拉列表来显示目录中的文件夹。我想要第二个下拉列表来显示所选文件夹中的文件。有可能吗?
这是ui.R:
shinyUI(pageWithSidebar(
sidebarPanel(
selectInput("Folder", "Folder:" , as.matrix(getFolders()),multiple = TRUE)
selectInput("FileInFolder", "File in folder:" ) # can this dropdown be linked to one above???
),
mainPanel(
))#end main
)
这是server.R
shinyServer(function(input, output) {})
以下是运行它的代码:
library(shiny)
runApp("C:/Users/me/Desktop/R Projects/FileFolder")
这是填充文件夹的global.R文件:
getFolders<-function()
{
folders<-list.dirs("//nas/mypath/",full.names= FALSE,recursive = FALSE)
folders
}
这是一个有趣的##如何将他连接到getFolders以便UI进行级联?
getFilesInFolder<-function(Folder)
{
files<-list.files(paste("//nas/mypath/",Folder,sep=""))
files
}
任何想法如何使这个工作,所以UI是级联的。也就是当你从文件夹下拉列表中选择一个文件夹时,文件下拉列表会被更新?
谢谢。
答案 0 :(得分:12)
查看updateSelectInput
功能。
以下是一个例子:
require(shiny)
datas <- data.frame(directory = c("a", "a", "a", "b", "b", "c"), file = sprintf("file%d", 1:6))
runApp(list(
ui = basicPage(
sidebarPanel(
selectInput("directory", "Select a directory", choices = levels(datas$directory), selected = levels(datas$directory)[1]),
tags$hr(),
selectInput("files", "Select files", choices = datas$file[datas$directory == levels(datas$directory)[1]], multiple = TRUE)
)
),
server = function(input, output, session) {
observe({
directory <- input$directory
updateSelectInput(session, "files", choices = datas$file[datas$directory == directory])
})
}
))