在 Shiny 中,提交按钮没有运行
Posted
技术标签:
【中文标题】在 Shiny 中,提交按钮没有运行【英文标题】:In Shiny, the submit button isn't running 【发布时间】:2021-08-02 21:05:37 【问题描述】:我编写了一个将 PDF 表转换为 CSV 的 R 脚本 (MAIN.R)。当我将 MAIN.R 作为单个文件运行时,它运行良好。我已经试过很多次了。
目前,我正在开发一个使用“MAIN.R”作为源并以 pdf 文件作为输入的 R 闪亮应用程序。当我按下提交按钮时,输出应该出现在主面板中。不幸的是,提交按钮没有按预期工作。
由于我是 Shiny 的新手,有人可以帮助我吗?
UI.R
shinyUI(fluidPage(
titlePanel("DATASET CONVERSION"),
sidebarLayout(
fileInput("filein", label = h2("Select a file to convert.")),
submitButton("Submit")
),
mainPanel(
tableOutput("Dataset")
)
)
)
Server.R
source("MAIN.R")
shinyServer(function(input, output)
outputdf <- reactive( input$filein
)
output$Dataset <- renderTable(
outputdf()
)
)
【问题讨论】:
您能否包含MAIN.R
文件来制作MRE?谢谢! outputdf()
是如何定义的?我想在采购功能时出了点问题。另请参阅 submitButton
是 deprecated
@starja,它没有弃用,它“通常不鼓励使用更通用的actionButton()
”(尽管情绪仍然)。
【参考方案1】:
您的提交按钮当前没有链接到任何东西,所以它不会做任何事情。如果我正确阅读了代码,那么您只是获取输入数据集并将其存储为 outputdf 的输出。然后,您的 output$Dataset 只会拾取该 outputdf 并按原样显示它,而无需对其进行任何工作。
您使用这样的操作按钮:
## In UI.R
actionButton("execute", "Execute the Main Function")
## In Server.R
observeEvent(input$execute,
## Do stuff here
)
请注意,actionButton 有两个参数,inputID(这是您引用它的方式)和要在顶部显示的文本。例如,对于 input$filein,'filein' 是 inputID。
在 Server.R 中,observeEvent 不会做任何事情,直到它检测到 input$execute 的变化,这种变化发生在有人单击按钮时。那是你把代码放在哪里做的事情。
现在,在 output$Dataset 中,您需要访问在该 observeEvent 中所做的任何事情的结果。一种方法是使用 reactiveValue。这就像一个反应式,但它不是一个函数,而是一个数据元素。将其初始化为空数据框,然后在 observeEvent 中更新它。像这样的:
## In Server.R
treated_output <- reactiveValue(data.frame())
observeEvent(input$execute,
## Run the function on the file
updated <- main_function(input$filein)
# Update your reactiveValue
treated_output(updated)
)
output$Dataset <- renderTable(
treated_output()
)
这有意义吗?
【讨论】:
据我了解,documentation、submitButton
独立存在,所有反应在按下之前不会更新;但总的来说,actionButton
的解决方案更好
是的,一切顺利,@Aqeel Padaria。非常感谢。以上是关于在 Shiny 中,提交按钮没有运行的主要内容,如果未能解决你的问题,请参考以下文章
在 Shiny 中,避免 selectInput 下拉菜单与其下方的操作按钮重叠