【问题标题】:Linked SelectInput controls in R Shiny - is it possible?R Shiny 中的链接 SelectInput 控件 - 有可能吗?
【发布时间】:2014-03-31 18:59:43
【问题描述】:

是否可以在 R Shiny 中链接选择输入控件。我目前有一个下拉菜单来显示目录中的文件夹。我想要第二个下拉列表来显示所选文件夹中的文件。有可能吗?

这里是 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
)

这是服务器。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 是级联的。那是当您从文件夹下拉列表中选择一个文件夹时,文件下拉列表会更新??

谢谢。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    查看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])
        })
      }
    ))
    

    【讨论】:

    • 尝试在不建模示例的情况下阅读和理解您的代码,因为我需要的要简单得多。使用level() 是为了获取唯一值,因为数据框本身就有重复?如果为真,这是否比 dplyer unique() 函数更有效?
    • 这不是一回事,level() 仅在使用因子时很有用,它返回对象级别的值。
    • 是的 - 我明白这不是一回事。只是验证在此代码的上下文中,levels 在分类变量中找到“类别”,在这种情况下成为数据框中的唯一值?还是对它的工作原理的解释与我认为的不同?
    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2021-11-26
    • 2021-08-04
    • 2019-03-04
    • 2020-09-14
    • 2017-03-29
    • 2023-01-30
    相关资源
    最近更新 更多