R闪亮的对象范围

时间:2015-09-09 18:21:49

标签: r shiny scoping

我正在尝试从被调用的环境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,因为它在全局环境中创建并且可用于所有会话

1 个答案:

答案 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 = ","))
    })
  }
)
相关问题