【问题标题】:Get an R Shiny Server from .globals从 .globals 获取 R Shiny 服务器
【发布时间】:2017-07-10 15:44:13
【问题描述】:

如果我们看一下 shinyServer 函数的实现,不难看出它只是将传递的函数插入到我认为的全局环境中。但是,我之前没有看到称为“.globals”的全局环境,仅称为“.GlobalEnv”或“globalenv()”。

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

我希望能够从被分配到的任何位置检索隐​​式传递给 shinyServer 函数的函数。我一直在查看全局环境,但是在使用了 shinyServer 函数后我没有看到 server 对象。 .globals 在哪里,如何访问它及其内容,包括 .globals$server

【问题讨论】:

    标签: r scope shiny webserver global


    【解决方案1】:

    .globals 是一个单独的环境。你可以在 github here 上看到它的代码。

    如果您想知道其中的内容,请尝试: ls(shiny:::.globals, all.names=T)

    你得到:

    ls(shiny:::.globals)
    [1] "clients" "domain" "IncludeWWW" "lastPort" "options" "ownSeed" "resources"
    [8] “reterror” “retval” “正在运行” “serverInfo” “showcaseDefault” “showcaseOverride” “已停止”
    [15]“测试模式”

    实际值是动态的。这是一个小应用程序,它将向您显示.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))
      }
    ))
    

    我使用sys.frame(1) 将所有环境放入x,然后从那里仅使用.globals 的子集。

    【讨论】:

    • 这部分看起来像我需要的,但我仍然不知道如何访问这个环境。我认为我可以library(shiny); ls('package:shiny', all.names=T); ls(all.names=T) 并且其中至少一个包含.globals 但我在那里看不到它。如何访问.globals 及其内容?
    • @ctesta01 在答案中添加了更多内容以解决您的问题。
    • 酷!非常整洁的答案。感谢您的应用示例。
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 2017-11-16
    • 2018-02-02
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2018-10-19
    相关资源
    最近更新 更多