首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用purrr::walk来安装多个事件观察器

使用purrr::walk来安装多个事件观察器
EN

Stack Overflow用户
提问于 2018-05-28 18:48:04
回答 1查看 1.5K关注 0票数 2

我有一组变量,它们被用作具有匹配函数的html元素的id(方便地命名为varname.helper()),每当在相应的html元素上触发事件时,我希望调用这些变量。

我尝试了以下几种方法:

代码语言:javascript
复制
server <- function(input, output, session) {
    observables <- c("foo1", "foo2", "foo3") # they are obviously much more than 3 vars...
    observables %>% walk(function(x) {
        observeEvent(quo(!!sym(paste0("input$", x))), quo(!!sym(paste0(x, ".helper"))(input)), handler.quoted=TRUE)
}

但它并没有起作用。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 19:30:42

您的问题从这里开始。整洁的评估不是解决这个问题的最佳方法。

代码语言:javascript
复制
    observeEvent(quo(!!sym(paste0("input$", x))), 
          quo(!!sym(paste0(x, ".helper"))(input)), handler.quoted=TRUE)

你想(对吗?)去找input$foo1foo1.helper。使用您的代码,最终结果是这个由quosym和感叹号组成的集群。

首先,如果所有的辅助变量都做同样的事情,为什么要创建许多单独的变量,称为foo1.helper?将它们放在列表中会更有意义,这样您就可以使用任何类型的循环/映射来简化您的工作:

代码语言:javascript
复制
helpers <- list(foo1 = whatever..., foo2 = whatever...)

接下来,

代码语言:javascript
复制
quo(!!sym(paste0("input$", x)))

为您提供了一个具有特定用例的相当复杂的对象。最好使用双括号选择,而不是使用$

代码语言:javascript
复制
input[[x]]

这使您可以使用字符变量x根据项目名称从列表中选择项目。这些更容易使用。$语法非常简单,不能让您轻松地使用字符值。

总结一下:

代码语言:javascript
复制
observeEvent(input[[x]], quote(helpers[[x]](input)), handler.quoted = TRUE)

这里有一个简短的示例,说明如何在您的代码中适应这些内容。注意,这里您必须使用purrr::walk,因为您不能使用for循环。for循环不能很好地与shiny内部注册观察者等的特定方式一起工作。

所以你的代码会变成:

代码语言:javascript
复制
library(shiny)
library(purrr)

ui <- fluidPage(
   sidebarLayout(
      sidebarPanel(
         actionButton("foo1", "Foo 1"),
         actionButton("foo2", "Foo 2")
      ),
      "Nothing here"
   )
)

server <- function(input, output) {
  helpers <- list(foo1 = quote(cat("foo 1; ")), foo2 = quote(cat("foo 2; ")))
  purrr::walk(c("foo1", "foo2"), ~ observeEvent(input[[.x]], 
        helpers[[.x]], handler.quoted = TRUE))
}

shinyApp(ui = ui, server = server)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50564632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档