我想在我上传到cran的程序包中编写一个闪亮的扩展名,该扩展名带有一个对象并允许进行各种操作。因此,该应用是一种实用的应用,这种类型:
ui <- function(x) fluidPage(
titlePanel(paste("displaying", x, "*m")),
sidebarLayout(
sidebarPanel(
sliderInput("m",
"m:",
min = 1,
max = 50,
value = 30)
),
mainPanel(textOutput("product"))
)
)
server <- function(x) {
function(input, output) {
output$product <- renderText(as.character(x*input$m))
}
}
run_app <- function(x) runApp(shinyApp(ui = ui(x), server = server(x)))
run_app(4)
(我已经复制了在精美的 vdiffr 包中看到的样式)
它具有漂亮的可读性。但是,此功能编写存在局限性:据我所知,它不能作为独立应用程序运行,因此无法将其作为iframe进行部署和集成(我希望能够在我的程序包之外上传到cran,以便能够将其集成到我公司的更大的闪亮仪表板中,而无需复制/粘贴/修改代码。
是否有一种协调两种视图的好方法,即某种 fine 方法来编写也可以独立运行的闪亮功能(您可以在较大的应用程序内部修改功能输入)?
答案 0 :(得分:1)
为什么不能在iframe中查看作为功能提供的闪亮应用程序?
这是一个简单的单个文件示例,使用callr
为内部应用程序生成另一个R会话。根据您托管应用程序的方式,这可能不是必需的-您需要的只是内部应用程序的URL。
library(shiny)
library(callr)
callr::r_bg(function(myArg) {
library(shiny)
ui <- fluidPage(
p(paste("inner app:", myArg)),
)
server <- function(input, output, session) {}
app <- shinyApp(ui, server)
runApp(app, host = "0.0.0.0", port = 8080)
}, args = list(myArg = 4), supervise = TRUE)
ui <- fluidPage(
p("outer app"),
tags$iframe(src="http://127.0.0.1:8080", scrolling="yes") # , height="900vh", width="100%", frameborder="0"
)
server <- function(input, output, session) {}
shinyApp(ui, server)
此外,您可能希望研究shiny modules。