首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何访问启动闪亮应用程序的函数的环境?

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

Stack Overflow用户
提问于 2016-12-08 06:34:37
回答 1查看 600关注 0票数 1

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

代码语言:javascript
运行
复制
f <- function(param) {
  runApp(
    list(
      ui = fixedPage({
        verbatimTextOutput('text')
      }),
      server = function(input, output) {
        output$text <- renderPrint(param)
      })
  )
}

f("hello")

但是,当从文件加载ui和服务器组件时,我无法再现这种行为:

文件内容:

代码语言:javascript
运行
复制
$ cat ui.R 
fixedPage({
      verbatimTextOutput('text')
    })

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

R码:

代码语言:javascript
运行
复制
g <- function(param) {
  runApp()
}

g("hello")

错误消息:

代码语言:javascript
运行
复制
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]

我猜想这与以下事实有关:在这两个示例中,组件不是在类似的作用域中创建的,但我无法找到解决办法.在第二个例子中,我是否可以从这个闪亮的应用程序中访问函数g的环境?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 07:03:59

是。在全局环境中定义param对象:

代码语言:javascript
运行
复制
g <- function(param) {
  assign("param",param,.GlobalEnv)
  runApp()
}
#this now works and print `hello` as intended
g("hello")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41033203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档