我有一个闪亮的应用程序,我通过调用一个调用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]
我猜想这与以下事实有关:在这两个示例中,组件不是在类似的作用域中创建的,但我无法找到解决办法.在第二个例子中,我是否可以从这个闪亮的应用程序中访问函数g
的环境?
发布于 2016-12-07 23:03:59
是。在全局环境中定义param
对象:
g <- function(param) {
assign("param",param,.GlobalEnv)
runApp()
}
#this now works and print `hello` as intended
g("hello")
https://stackoverflow.com/questions/41033203
复制