我正在尝试从被调用的环境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,因为它在全局环境中创建并且可用于所有会话
答案 0 :(得分:1)
我不确定为什么它不起作用,但有&#39;一个简单的解决方法:明确地将obj1
传递给myf
:
library(shiny)
shinyApp(
ui = textOutput("test1"),
server = function(input, output) {
## myf now takes two arguments, x and a:
myf <- function(x, a) {
return(paste0(x, a))
}
output$test1 <- renderText({
obj1 <- "testing"
## Now you can just pass obj1 as a second argument to myf
## without worrying about scoping:
a <- lapply(c("a","b","c"), myf, obj1)
return(paste(unlist(a), collapse = ","))
})
}
)