R闪亮的响应式文件列表

3

对于shiny新手,我希望我的应用程序能够显示目录中的所有文件,并在添加或删除文件时更新列表。我发现可以使用reactivePoll实现这一点,因此我将其放在了我的服务器端:

server <- function(input, output, session) {

    has.new.files <- function() {
        length(list.files())
    }
    get.files <- function() {
        list.files()
    }
    output$files <- renderText(reactivePoll(10, session, checkFunc=has.new.files, valueFunc=get.files))    
}

然而,我不知道如何在我的ui中访问包含我的文件的字符向量。我也怀疑我的服务器中是否选择了renderText。这是我的ui(非响应式,只读取一次文件列表):

ui <- fluidPage(

    ## How to access the files from server function ??
    selectInput("file", "Choose file", list.files())
)

因此,我不知道如何访问数据,有人可以指导我吗?
1个回答

4
你可以尝试这个:

你可以尝试这个:

server <- function(input, output, session) {

  has.new.files <- function() {
    unique(list.files())
  }
  get.files <- function() {
    list.files()
  }

  # store as a reactive instead of output
  my_files <- reactivePoll(10, session, checkFunc=has.new.files, valueFunc=get.files)

  # any time the reactive changes, update the selectInput
  observeEvent(my_files(),ignoreInit = T,ignoreNULL = T, {
    print(my_files())
    updateSelectInput(session, 'file',choices = my_files())
  })

}


ui <- fluidPage(
  selectInput("file", "Choose file", list.files())
)

shinyApp(ui,server)

每当添加、删除或重命名文件时,它都会更新selectInput。如果你只希望在添加文件时更改它,你可以用自己的函数替换has.new.files。希望这有所帮助!


但是在UI中放什么呢?在你的例子中,仍然是list.files(),所以它仍然不是响应式的。 - user1981275
界面现在很好,你可以在RStudio中复制并粘贴代码进行尝试。它在UI中使用list.files()进行初始化,因此在应用程序启动时具有值。但是,每当目录中的文件(反应式)更改时,服务器都会更新它。 - Florian
或许可以在此处查看另一个示例。正如您所见,UI 被初始化为静态,并从服务器进行更新。 - Florian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接