code r shiny

code - Cómo llamar a una aplicación desde dentro de una aplicación en Shiny



shiny ui (1)

Tengo un directorio de aplicaciones Shiny que se ve así:

-- ShinyApps | |_ base_app |_ my_sub_app

Y en base_app tengo el siguiente código:

# app.R #----------- # Server Section #----------- server <- function(input, output) { } #----------- # UI section #----------- ui <- fixedPage( h1("My head"), br(), br(), fluidRow( column(6, wellPanel( h3("AMAZON"), hr(), a("Go", class = "btn btn-primary btn-md", href = "http://www.amazon.com") )), column(6, wellPanel( h3("My Sub App"), hr(), a("Go", class = "btn btn-primary btn-md") # What should I do here to include My_SUB_APP )) ) ) shinyApp(ui = ui, server = server)

Que se ve así:

Lo que quiero hacer es cuando haga clic en el botón Go en el panel My SubApp , se sub_app() ¿Cómo puedo hacerlo?

No quiero pasar URL (por ejemplo, a través de href )


De acuerdo, después de un análisis más detallado, esto es técnicamente posible.

(Pero una solución de enlace con href es casi seguro mejor, el problema es que Shiny Server, o RStudio Connect, o cualquier producto que esté utilizando para alojar la aplicación necesita tener la aplicación cargada para poder acceder a ella, entonces ¿por qué no solo enlace a donde lo está alojando?)

Esta solución no tiene el flujo de trabajo obvio de "cargar este directorio" e implica cargar archivos server.R y ui.R específicamente

Para sobrescribir la interfaz de usuario y el servidor actuales, debe sobrescribir literalmente la interfaz de usuario y el servidor.

Sobrescribir el ui es fácil, solo renderiza todo desde el principio en el lado del servidor y luego cambia el ui cuando deciden presionar el botón.

Sobrescribir el servidor es una cuestión de evaluar la función del servidor del subAPP, (que puede tener absolutamente colisiones de espacio de nombres, pero para una aplicación simple tal vez sea posible)

Aquí hay un ejemplo de una forma de hacerlo.

archivo app.R :

#----------- # UI section #----------- ui1 <- fixedPage( h1("My head"), br(), br(), fluidRow( column(6, wellPanel( h3("AMAZON"), hr(), a("Go", class = "btn btn-primary btn-md", href = "http://www.amazon.com") )), column(6, wellPanel( h3("My Sub App"), hr(), a("Go", # Link button to input$SubApp1 id = ''SubApp1'', class = "btn btn-primary btn-md action-button") )) ) ) appUI <- parse(file = ''subdir/ui.R'') appServer <- eval(parse(file = ''subdir/server.R'')) #----------- # Server Section #----------- server <- function(input, output, session) { output[[''fullPage'']] <- renderUI({ if(!is.null(input$SubApp1) && input$SubApp1 > 0) { # If they pressed the button once, # run the appServer function and evaluate the parsed appUI code appServer(input, output, session) eval(appUI) } else { # ui1 } }) } ui <- uiOutput(''fullPage'') shinyApp(ui = ui, server = server)

subdir / ui.R (Ejemplo) :

page <- navbarPage("X-men",id = "navibar", tabPanel("placeholder"), tabPanel("Plot",value = "plot"), selected = "plot" ) page[[3]][[1]]$children[[1]]$children[[2]]$children[[1]] <- tags$li(tags$a( href = ''http://google.com'', icon("home", lib = "glyphicon") ) ) page

subdir / server.R (Ejemplo) :

function(input, output, session) { }