R 在没有更改输出的情况下单击按钮时在后台执行函数(闪亮)

R 在没有更改输出的情况下单击按钮时在后台执行函数(闪亮),r,shiny,R,Shiny,我希望能够在我闪亮的应用程序中单击一个按钮。到目前为止很容易。 但在执行此操作时,加载、写入然后保存excel工作表的函数应该“在后台”执行,而应用程序本身不会更改输出。 我该怎么做 亲切问候, 马丁:是的。尝试使用观察者 在server.R中: 这样,当服务器完成后台处理时,或者如果出现错误,您可以从客户端获得一些反馈。也许你想通知用户一个错误或什么的 使用观察的参考是是。尝试使用观察者 在server.R中: 这样,当服务器完成后台处理时,或者如果出现错误,您可以从客户端获得一些反馈。也许你

我希望能够在我闪亮的应用程序中单击一个按钮。到目前为止很容易。 但在执行此操作时,加载、写入然后保存excel工作表的函数应该“在后台”执行,而应用程序本身不会更改输出。 我该怎么做

亲切问候,


马丁:是的。尝试使用观察者

在server.R中: 这样,当服务器完成后台处理时,或者如果出现错误,您可以从客户端获得一些反馈。也许你想通知用户一个错误或什么的


使用
观察
的参考是

是。尝试使用观察者

在server.R中: 这样,当服务器完成后台处理时,或者如果出现错误,您可以从客户端获得一些反馈。也许你想通知用户一个错误或什么的


使用
观察
的参考是

是。尝试使用观察者

在server.R中: 这样,当服务器完成后台处理时,或者如果出现错误,您可以从客户端获得一些反馈。也许你想通知用户一个错误或什么的


使用
观察
的参考是

是。尝试使用观察者

在server.R中: 这样,当服务器完成后台处理时,或者如果出现错误,您可以从客户端获得一些反馈。也许你想通知用户一个错误或什么的



使用
观察
的参考是

使用
操作按钮
。使用
操作按钮
。使用
操作按钮
。使用
操作按钮
。感谢您的详细回答!我试试:)另一个问题:我现在有一个actionButton,只有在以前发生过另一个操作时才会出现。因此,如果我让一个观察者观察这个“依赖”操作按钮,当我检查if(input$depactionButton>0)时,我总是会得到一个错误,比如“argument的长度为0”。我怎样才能避免这种情况?希望这是可以理解的。我不想提出一个全新的问题;)好的,解决方案是首先使用if(!is.null(输入$dependentbutton)),然后在内部使用if(输入$dependentbutton>0)!你好,Martindabelju冶炼厂。很高兴你自己发现了。对不起,今天早上我很忙,没有注意到你的评论。我猜在你的问题中,你说一个按钮将“出现”,意思是你使用
server.R
中的
updateUI
创建了这个按钮?如果要避免额外的
If
条件,可以使用
conditionalPanel
环绕依赖按钮,并仅在单击actionButton后使其可见。让我补充一点解释。您可以在
ui.R
中创建这两个按钮,但是
dependentButton
由一个
conditionnalpanel
包装,其
condition
参数设置为
condition=“input.actionButton>0”
。这样,当您单击
actionButton
时,它会增加计数器
input$actionButton
,满足指定的条件,因此会出现从属按钮。请注意,您在条件中使用了
input.actionButton
,因为此条件是用Javascript计算的,而不是R。因此您使用的是“点”,而不是“美元符号”。谢谢您的详细回答!我试试:)另一个问题:我现在有一个actionButton,只有在以前发生过另一个操作时才会出现。因此,如果我让一个观察者观察这个“依赖”操作按钮,当我检查if(input$depactionButton>0)时,我总是会得到一个错误,比如“argument的长度为0”。我怎样才能避免这种情况?希望这是可以理解的。我不想提出一个全新的问题;)好的,解决方案是首先使用if(!is.null(输入$dependentbutton)),然后在内部使用if(输入$dependentbutton>0)!你好,Martindabelju冶炼厂。很高兴你自己发现了。对不起,今天早上我很忙,没有注意到你的评论。我猜在你的问题中,你说一个按钮将“出现”,意思是你使用
server.R
中的
updateUI
创建了这个按钮?如果要避免额外的
If
条件,可以使用
conditionalPanel
环绕依赖按钮,并仅在单击actionButton后使其可见。让我补充一点解释。您可以在
ui.R
中创建这两个按钮,但是
dependentButton
由一个
conditionnalpanel
包装,其
condition
参数设置为
condition=“input.actionButton>0”
。这样,当您单击
actionButton
时,它会增加计数器
input$actionButton
,满足指定的条件,因此会出现从属按钮。请注意,您在条件中使用了
input.actionButton
,因为此条件是用Javascript计算的,而不是R。因此您使用的是“点”,而不是“美元符号”。谢谢您的详细回答!我试试:)另一个问题:我现在有一个actionButton,只有在以前发生过另一个操作时才会出现。因此,如果我让一个观察者观察这个“依赖”操作按钮,当我检查if(input$depactionButton>0)时,我总是会得到一个错误,比如“argument的长度为0”。我怎样才能避免这种情况?希望这是可以理解的。我不想提出一个全新的问题;)好的,解决方案是首先使用if(!is.null(输入$dependentbutton)),然后在内部使用if(输入$dependentbutton>0)!你好,Martindabelju冶炼厂。很高兴你自己发现了。对不起,今天早上我很忙,没有注意到你的评论。我猜在你的问题中,你说一个按钮将“出现”,意思是你使用
server.R
中的
updateUI
创建了这个按钮?如果要避免额外的
If
条件,可以使用
conditionalPanel
环绕t
shinyServer(function(input, output, session) {
    # other code ...
    observe({
        # do_something_button is your actionButton id.
        if (input$do_something_button > 0) {
            # perform behind the scenes analysis here.

            # if you want to send a message to the client side, you can try 
            # something like: 
            message <- list(type="completed", excel_file=saved_file)
            session$sendCustomMesage("background_task", message)
        }

    })
    # other code ...
})
Shiny.addCustomMessageHandler("background_task", function(message) {
    console.log("Finished processing: " + message.excel_file);
});