【问题标题】:Reactivity problem while using renderTmap within R/shiny在 R/shiny 中使用 renderTmap 时的反应性问题
【发布时间】:2020-04-25 20:08:24
【问题描述】:

我正在尝试将 tmap 集成到闪亮的应用程序中,但我遇到了反应性问题。我收到一个错误,暗示函数 renderTmap() 不会创建反应性环境(而“经典”renderXXX() 函数会)。

这是我收到的错误消息:

.getReactiveEnvironment()$currentContext() 中的错误:操作不 在没有主动反应上下文的情况下允许。 (你试图做某事 这只能从反应式表达式或观察者内部完成。)

因此我没有设法创建考虑输入值的地图...

这是我正在尝试做的一个简单示例(仅当我不根据输入值更新 data_map 时才有效!)

library(shiny)
library(sf)
library(tmap)

nc=st_read(system.file("shape/nc.shp", package="sf"))
# Define UI for application that draws a histogram
ui=fluidPage(
  selectInput("name",
              "name",
              unique(nc$NAME)),
  tmapOutput("map"))
)
server=function(input, output) {
  output$map <- renderTmap({
    data_map <- subset(nc,NAME==input$name)
    tm_shape(data_map)+
      tm_borders()
  })
}

shinyApp(ui=ui,server=server)

有人对此问题有解释/解决方法吗?

P.S.:我真的很喜欢 renderTmap 而不是 renderLeaflet:我正在尝试向迄今为止使用过 tmap 的学生教授闪亮的东西......

【问题讨论】:

  • observe ({ output$map &lt;- renderTmap({ data_map &lt;- subset(nc,NAME==input$name) tm_shape(data_map)+ tm_borders() }) }) 完成了这项工作,但坦率地说,我不知道为什么,可能renderTmap 在存在依赖项时无法正常工作,即input$name,因为如果我们做output$map &lt;- renderTmap({ tm_shape(nc)+ tm_borders() }).
  • 没错,谢谢!在与 renderTmap() 函数关联的示例中,有一些接近此解决方案的内容,尽管它使用函数 tmapProxy() 而不是 renderTmap()。我仍然想知道为什么需要“observe()”。我很难向我的学生解释这一点;-)。

标签: r shiny tmap


【解决方案1】:

此问题已于 2020 年 7 月 16 日修复。现在,您问题中的代码应该可以正常工作了。

您现在需要使用包的开发版本:

remotes::install_github("mtennekes/tmaptools")
remotes::install_github("mtennekes/tmap")

通过https://github.com/mtennekes/tmap/issues/474了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2020-07-07
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多