我正在尝试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 = ","))
})
}
)
Run Code Online (Sandbox Code Playgroud)
注意:我不想obj1<<-创建在全局环境中创建的obj1 ,并且可用于所有会话
正确的解决方法是,你有三个问题:首先,你需要引用"obj1"这样的
get("obj1", envir = ...)
Run Code Online (Sandbox Code Playgroud)
其次,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 = ","))
})
}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |