我正在尝试从被调用环境 a<-get(obj1,envir=parent.environment())
访问驻留在调用环境中的对象(myf
)我无法让它工作。我得到的错误是 Object obj1 not found
.我试过parent.frame()
还。有什么想法吗?
library(shiny)
shinyApp(
ui = textOutput("test1"),
server = function(input, output) {
myf <- function(x) {
a <- get(obj1, envir = parent.environment())
return(paste0(x,a))
}
output$test1 <- renderText({
obj1 <- "testing"
a <- lapply(c("a","b","c"), myf)
return(paste(unlist(a), collapse = ","))
})
}
)
注意:我不想使用 obj1<<-
创建 obj1因为它在全局环境中创建并且可用于所有 session
最佳答案
正确的解决方法是你有三个问题:首先你需要像这样引用"obj1"
get("obj1", envir = ...)
其次,parent.environment()
不是函数。它不存在。
第三,你需要了解一下环境和调用框架,才能知道它是如何工作的(它与 Shiny 无关)。您要使用的是 parent.frame(2)
(在 lapply
内添加一层)
所以要修改你原来的代码,解决办法是这样的:
library(shiny)
shinyApp(
ui = textOutput("test1"),
server = function(input, output) {
myf <- function(x) {
a <- get("obj1", envir = parent.frame(2))
return(paste0(x,a))
}
output$test1 <- renderText({
obj1 <- "testing"
a <- lapply(c("a","b","c"), myf)
return(paste(unlist(a), collapse = ","))
})
}
)
关于R Shiny 的对象范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32486672/