【问题标题】:using reactive expressions unreactivly in shiny?在闪亮中不活跃地使用反应性表达式?
【发布时间】:2014-09-03 23:16:20
【问题描述】:

我需要使用:

session$clientData$url_search

这是一个反应式表达式,但我不想在反应式包装器中使用它,即

sessionData <- reactive({
  sessionData <- session$clientData$url_search
})

现在有没有办法以非反应方式使用此会话数据?即

url <- paste("http://example.web.ninja/,sessionData,sep="")
URLdata <- fromJSON(file=url,method='C')

无需使用:

URLdata <- reactive({
    url <- paste("http://example.web.ninja/,sessionData(),sep="")
    URLdata <- fromJSON(file=url,method='C')
 })

谢谢

【问题讨论】:

  • 你为什么要这样做?
  • 我正在编辑我不久前制作的一个较旧的应用程序,以便它现在从网络下载其数据,而不是我继续更新的 CSV 文件。我想这样做是因为如果我将 URL 数据包装在一个反应​​式包装器中,我会继续收到如下错误: URLdata$Name 中的错误:类型闭包的对象不是子集
  • 也尝试过解决这个问题:stackoverflow.com/questions/15327506/… 尝试使用
  • Error in URLdata$Name ... 表示访问变量的方式是URLdata()$Name
  • 这可以正常工作,直到我使用该反应式表达式创建一个数据库:我创建一个循环来解压缩 JSON 文件:for(j in 1:numObs[1,tx]){ df[index, 1]

标签: r shiny rstudio


【解决方案1】:

在这种情况下错误:

Error in URLdata$Name : object of type closure is not subsettable

表示该对象需要被引用为

URLdata()$Name

这会导致调用响应函数。在反应式环境中调用反应式变量会使反应式环境依赖于该反应式变量。很快事情就可以级联,所以有一个方便的函数isolate,它允许在反应环境中调用反应变量而不赋予这种依赖关系。在您的情况下,使用

访问所需的对象
isolate(URLdata()$Name)

可能是你想要的。

【讨论】:

    猜你喜欢
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多