所以我试着做一个闪亮的应用程序,我有一个按钮,只有当文件上传时才会显示;对于此即时消息使用条件面板。
用户权限:
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 > 0
,input.files.size() > 0
,这两种方法都会导致按钮在我上传文件之前出现。我猜这是因为input$files在选择文件之前是一个空的data.frame,所以它的长度/大小都不为零,对吗?
在至少一个文件上传完成之前,我可以使用什么条件来隐藏按钮?
我认为另一种选择是用uiOutput
替换conditionalPanel
,并在监视输入文件的server.R的observe/isolate块中调用renderUI({actionButton(...)})
(if (nrow(input$files) < 1) return()
);这是唯一的方法吗?如果我可以这样做的任何一种方式,什么会让我选择一个或另一个(除了conditionalPanel
导致更少的代码)?
2条答案
按热度按时间aij0ehis1#
必须生成一个无功输出,返回上传状态,并将此输出的选项
suspendWhenHidden
设置为FALSE
。更准确地说,在 server.R 中,您肯定有一个React函数,比如
getData()
,用于从上传的文件中创建一个 Dataframe 。在 ui.R 中,您可以通过执行以下操作来使用
conditionalPanel()
:g0czyy6m2#
在R4.2.2下,我不得不将其更改为
"output.fileUploaded == 0"
才能使其工作,我不知道为什么。