2017-07-10 2 views
2

Si nous regardons l'implémentation de la fonction shinyServer, il n'est pas trop difficile de voir qu'elle insère juste la fonction passée dans ce que je suppose être l'environnement global. Cependant, je n'ai pas vu l'environnement global appelé ".globals" avant et seulement comme ".GlobalEnv" ou "globalenv()".Obtenez un R Shiny Server à partir de .globals

library(shiny) 
shinyServer 
#> function (func) 
#> { 
#>  .globals$server <- list(func) 
#>  invisible(func) 
#> } 
#> <environment: namespace:shiny> 

Je voudrais être en mesure de récupérer la fonction implicitement passée à la fonction de shinyServer d'où il est affecté. J'ai regardé dans l'environnement global, mais je ne vois pas un objet server après avoir utilisé la fonction shinyServer. Où est .globals et comment puis-je y accéder et son contenu y compris .globals$server?

Répondre

2

.globals est un environnement séparé. Vous pouvez voir le code pour cela sur github here.

Si vous voulez savoir ce qui se passe en elle essayer: ls(shiny:::.globals, all.names=T)

Vous obtenez:

ls (. ::: brillant) GLOBALS
[1] "clients" "domaine" "IncludeWWW" "lastPort" "options" "ownSeed" "ressources"
[8] "reterror" "retval" "running" "serverInfo" "showcaseDefault" "showcaseOverride" "arrêté"
[15] "testmode"

Les valeurs réelles sont dynamiques. Voici une petite application qui vous montrera quelles valeurs sont actuellement dans le .globals.

runApp(list(
    ui = bootstrapPage(
    h3("What's in globals?"), 
    selectInput(inputId="globin",label="Parts of .globals", choices=ls(shiny:::.globals)), 
    textOutput('glob') 
), 
    server = function(input, output) { 
    x<-sys.frame(1) 
    output$glob <- renderPrint(mget(input$globin, env=x$.globals)) 
    } 
)) 

j'ai eu tous les environnements en utilisant xsys.frame(1) et puis juste sous-ensemble .globals à partir de là.

+0

Cela ressemble en partie à ce dont j'ai besoin, mais je ne sais toujours pas comment accéder à cet environnement. Je pense que je pourrais 'bibliothèque (brillant); ls ('paquet: brillant', all.names = T); ls (all.names = T) 'et au moins un de ceux-ci contiendrait' .globals' mais je ne le vois pas là. Comment puis-je accéder à '.globals' et à son contenu? – ctesta01

+0

@ ctesta01 Ajouté plus à la réponse pour répondre à vos questions. –

+0

Cool! Réponse très soignée. Merci pour l'exemple de l'application. – ctesta01