r语言 - 使条件面板依赖于使用 fileInput 上传的文件



所以我正在尝试制作一个闪亮的应用程序,其中我有一个按钮,该按钮仅在文件上传时才显示; 为此,请使用条件面板。

用户界面。R:

require(shiny)
shinyUI(pageWithSidebar(
  headerPanel("My App"),
  sidebarPanel(
    fileInput("files", "Choose file"),
    conditionalPanel(
      condition = "input.files",
      actionButton("submitFiles", "Submit files for processing"))),
  mainPanel(h3("Nothing to see here"))
))

我认为我的服务器中没有什么可关心的。R,因为上面的例子没有任何事情。在上述条件下,按钮永远不会显示,即条件永远不会为真。

我为我的病情尝试过的一些事情是input.files.length > 0input.files.size() > 0,这两者都会导致在我上传文件之前按钮存在。我猜这是因为input$files在选择文件之前是一个空的data.frame,所以有一个非零的长度/大小,对吗?

在至少一个文件完成上传之前,我可以使用什么条件来隐藏按钮?

我认为另一种选择是用uiOutput替换conditionalPanel,并在服务器中的观察/隔离块内调用renderUI({actionButton(...)})。R 正在监视输入文件(if (nrow(input$files) < 1) return());这是唯一的办法吗?如果我能以任何一种方式做到这一点,那么是什么会让我选择一个或另一个(除了conditionalPanel导致更少的代码)?

您必须制作一个返回上传状态的反应式输出,并将此输出的选项suspendWhenHidden设置为 FALSE

更准确地说,在服务器中。R 你肯定有一个反应式函数,比如说getData()从上传的文件制作数据帧。然后这样做:

  getData <- reactive({
    if(is.null(input$files)) return(NULL)
    ......
  })
  output$fileUploaded <- reactive({
    return(!is.null(getData()))
  })
  outputOptions(output, 'fileUploaded', suspendWhenHidden=FALSE)

而在 ui 中。R 你可以通过以下方式使用conditionalPanel()

conditionalPanel("output.fileUploaded",
   ......

在 R 4.2.2 下,我必须将其更改为 "output.fileUploaded == 0" 才能使其工作。我不知道为什么。

最新更新