当我在一个非常简单的闪亮应用程序中按动作按钮时,我试图调用另一个闪亮的应用程序。另一个应用程序位于一个名为益与ui.R和server.R文件的文件夹中,但是当我单击该按钮时没有任何反应。我试图做的可能吗?
干杯。
library(shiny)
shinyUI(fluidPage(
# Application title
titlePanel("RunnApp"),
mainPanel(
actionButton("goButton", "Go!")
)
))
library(shiny)
shinyServer(function(input, output) {
ntext <- eventReactive(input$goButton, {
runApp("benefits")
})
})
答案 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文件创建)在我的环境中。
棘手的问题是,当我(我认为这是问题)时,我收到此错误,它初始化引用的应用程序:
处理程序错误$ 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/"))