R Shiny 的对象范围

标签 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因为它在全局环境中创建并且可用于所有 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/

相关文章:

recursion - 带外部变量的递归函数

r - 解决自定义函数中的范围问题以从 `htest` 对象中提取数据

r - 反转r数据帧中偶数行的符号

renderDataTable 中的 Rstudio Shiny 响应式(Reactive)选项列表

r - 在 Shiny 的网络应用程序中显示错误而不是绘图

rhandsontable,在列的单元格中换行(和自动行高)

Ember 对象的 Javascript 范围

r - dbPool 对象过期

R Shiny : Output functions don't work within eventReactive()

r - 为什么[-不能用名称对列进行子集设置(即删除)?