如何访问启动Shiny应用程序的函数的环境?

时间:2016-12-08 06:34:37

标签: r shiny

我有一个 Shiny 应用程序,我通过调用一个调用shiny::runApp的函数来运行。应用程序可以访问全局环境,因此它可以访问具有事先确定的名称的对象中的数据。但是,我想通过运行应用程序的函数的参数传递数据。以下示例有效。

f <- function(param) {
  runApp(
    list(
      ui = fixedPage({
        verbatimTextOutput('text')
      }),
      server = function(input, output) {
        output$text <- renderPrint(param)
      })
  )
}

f("hello")

但是,当从文件加载 ui 服务器组件时,我无法重现此行为:

文件内容:

$ cat ui.R 
fixedPage({
      verbatimTextOutput('text')
    })

$ cat server.R 
function(input, output) {
      output$text <- renderPrint(param)
    }

R 代码:

g <- function(param) {
  runApp()
}

g("hello")

错误讯息:

Listening on http://127.0.0.1:3870
Warning: Error in renderPrint: object 'param' not found
Stack trace (innermost first):
    86: renderPrint
    85: func
    84: eval
    83: eval
    82: withVisible
    81: evalVis
    80: utils::capture.output
    79: paste
    78: origRenderFunc
    77: output$text
     2: runApp
     1: g [#2]

我猜这与组件不是在两个示例中的类似范围中创建这一事实有关,但我找不到解决方法......在第二个示例中,有没有办法我可以从Shiny app访问函数g的环境?

1 个答案:

答案 0 :(得分:3)

是。在全局环境中定义WebDriver tempDriver = new ChromeDriver(); // do some stuff tempDriver.close(); 对象:

param