runapp使用actionbutton从其他闪亮的应用程序中闪亮

时间:2015-11-08 10:04:58

标签: r shiny

当我在一个非常简单的闪亮应用程序中按动作按钮时,我试图调用另一个闪亮的应用程序。另一个应用程序位于一个名为益与ui.R和server.R文件的文件夹中,但是当我单击该按钮时没有任何反应。我试图做的可能吗?

干杯。

ui.R

library(shiny)

shinyUI(fluidPage(

  # Application title
  titlePanel("RunnApp"),
    mainPanel(
      actionButton("goButton", "Go!")
    )

))

server.R

library(shiny)

shinyServer(function(input, output) {
    ntext <- eventReactive(input$goButton, {
      runApp("benefits")
  })
            })

3 个答案:

答案 0 :(得分:1)

TEMPORARY ANSWER:

我已经开始寻找这个问题的答案了。这个答案将及时更新。

#server.R



library(shiny)

shinyServer(function(input, output) {
  ntext <- eventReactive(input$goButton, {
    stopApp(runApp('C:/Users/Infinite Flash/Desktop/Dashboard'))
  })

  output$nText <- renderText({
    ntext()
  })
})



#ui.R

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("actionButton test"),
  sidebarPanel(
    actionButton("goButton", "Go!"),
    p("Click the button to update the value displayed in the main panel.")
  ),
  mainPanel(
    textOutput("nText")
  )
))

这段代码的优点在于它初始化了我用stop(runApp('C:/Users/Infinite Flash/Desktop/Dashboard'))语句指定的应用程序。我可以验证它确实运行了应用程序,因为我在该应用程序中有一个global.R文件,该文件有6个预先加载的数据集,应用程序在启动之前需要加载这些数据集。我知道它运行是因为在这行代码运行后,我有这些对象(由引用的应用程序中的global.R文件创建)在我的环境中。

棘手的问题是,当我(我认为这是问题)时,我收到此错误,它初始化引用的应用程序:

聆听http://127.0.0.1:7908

处理程序错误$ add(处理程序,密钥,尾部):密钥/已在使用

目前这种带有闪亮界面的错误超出了我的知识范围。要调试此错误,我需要进行调查。

答案 1 :(得分:0)

没有直接方法可以从另一个闪亮的应用程序中启动闪亮的应用程序。在闪亮的应用程序中调用runApp()会导致此错误,

Warning: Error in shiny::runApp: Can't call `runApp()` from within `runApp()`. If your application code contains `runApp()`, please remove it.

但是,对于RStudio 1.2,有一种解决方法。我们可以将第二个应用程序的runApp()存储在R脚本中,并将该脚本作为单独的R Studio作业执行。这将在新会话中启动第二个闪亮的应用程序,而不会停止第一个。

代码:

script.R

shiny::runApp(path_to_app, launch.browser = TRUE, port = 875)

ui.R

actionButton("launch_app", "Launch second Shiny App")

server.R

observeEvent(input$launch_app, {
        rstudioapi::jobRunScript(path = path_to_script)
    })

如果这是用于软件包的,请将脚本存储在inst /中,并使用system.file()构建路径。

答案 2 :(得分:0)

不要再次使用 run-app,而是使用 ShinyAppDir('path to your new app')。

此代码对我有用。 stopApp(shinyAppDir("NewApp/"))