R Shiny中的链接SelectInput控件 - 是否可能?

时间:2014-03-31 18:59:44

标签: r shiny

是否可以在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是级联的。也就是当你从文件夹下拉列表中选择一个文件夹时,文件下拉列表会被更新?

谢谢。

1 个答案:

答案 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])
    })
  }
))