R语言 使conditionalPanel依赖于使用fileInput上传的文件

wnavrhmk  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(115)

所以我试着做一个闪亮的应用程序,我有一个按钮,只有当文件上传时才会显示;对于此即时消息使用条件面板。
用户权限:

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,并在监视输入文件的server.R的observe/isolate块中调用renderUI({actionButton(...)})if (nrow(input$files) < 1) return());这是唯一的方法吗?如果我可以这样做的任何一种方式,什么会让我选择一个或另一个(除了conditionalPanel导致更少的代码)?

aij0ehis

aij0ehis1#

必须生成一个无功输出,返回上传状态,并将此输出的选项suspendWhenHidden设置为FALSE
更准确地说,在 server.R 中,您肯定有一个React函数,比如getData(),用于从上传的文件中创建一个 Dataframe 。

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",
   ......
g0czyy6m

g0czyy6m2#

在R4.2.2下,我不得不将其更改为"output.fileUploaded == 0"才能使其工作,我不知道为什么。

相关问题