获取在 Shiny 中使用 grep 触发的事件(生成的输入)

2024-02-18

我已生成输入,_1、_2 等...但我想知道触发了哪个事件。

  • 有用 :获取在 Shiny 中触发的事件? https://stackoverflow.com/questions/56770222/get-the-event-which-is-fired-in-shiny/56771353#56771353

  • 有用 :以闪亮的方式处理多个输入 https://stackoverflow.com/questions/40044768/addressing-multiple-inputs-in-shiny/40045292#40045292

但两者都不起作用.clientdata_output_aFired_hidden and d被解雇。在我的真实应用程序中,隐藏或与反应值链接的其他事件也会触发。

并且没有input$changed它可以工作,但不知道哪个被解雇了。

ui <- fluidPage(
  tags$head(
    tags$script(
      "$(document).on('shiny:inputchanged', function(event) {
          if (event.name != 'changed') {
            Shiny.setInputValue('changed', event.name);
          }
        });"
    )
  ),
  numericInput("a_1", "a_1", 0),
  textInput("a_2", "a_2"),
  textInput("c", "c"),
  textInput("d", "d"),



 p("changedInputs"), textOutput("changedInputs"),br(),
 p("aFired"),textOutput("aFired")
)

server <- function(input, output, session) {
  output$changedInputs <- renderText({
    paste("Outside observer: Latest input fired:", paste(input$changed, collapse = ", "))
  })

  observeEvent({
    lapply(
      (grep(pattern = "a_+[[:digit:]]|c"
      , x = names((input)), value = TRUE)),
      function(x) (input)[[x]]
    )
  }, {
    req(input$changed)
    if (input$changed == "a_1") {
      output$aFired <- renderText("Inside observer: input$a_1 was fired")
    } else  if (input$changed == "a_2") {
      output$aFired <- renderText("Inside observer: input$a_2 was fired")
    } else {
      output$aFired <- renderText((input$changed))
    }
  }, ignoreInit = TRUE)
}

shinyApp(ui, server)

有两个问题需要解决:

  1. 你的正则表达式|c caught input$changed
  2. 你需要使用isolate(names(input))在事件表达式内,否则观察者将因事件的每次变化而触发names(input)
  3. Edit: use isolate({input$changed})- 查看注释(使用时不需要reactiveVal())

ui <- fluidPage(
  tags$head(
    tags$script(
      "$(document).on('shiny:inputchanged', function(event) {
          if (event.name != 'changed') {
            Shiny.setInputValue('changed', event.name);
          }
        });"
    )
  ),
  numericInput("a_1", "a_1", 0),
  textInput("a_2", "a_2"),
  textInput("c", "c"),
  textInput("d", "d"),

  p("changedInputs:"), textOutput("changedInputs"), br(),
  p("aFired:"), textOutput("aFired")
)

server <- function(input, output, session) {
  output$changedInputs <- renderText({
    paste("Outside observer: Latest input fired:", paste(input$changed, collapse = ", "))
  })

  observeEvent(eventExpr = {
    lapply(grep(pattern = "^a_+[[:digit:]]$|^c$", x = isolate({names(input)}), value = TRUE), function(x){input[[x]]})
  }, handlerExpr = {
    req(input$changed)
    if (input$changed == "a_1") {
      output$aFired <- renderText("Inside observer: input$a_1 was fired")
    } else  if (input$changed == "a_2") {
      output$aFired <- renderText("Inside observer: input$a_2 was fired")
    } else {
      output$aFired <- renderText({paste("Inside observer:", isolate({input$changed}), "was fired")})
    }
  }, ignoreInit = TRUE)
}

shinyApp(ui, server)

另一个编辑:现在我记得在哪里isolate({input$changed})迷路了(我确信它在我的测试期间有效......)最初我怀疑renderText()嵌套在观察者内部可能会导致问题,因此我实现了一个reactiveVal()打印输出。该解决方案无需isolate({input$changed}):

ui <- fluidPage(
  tags$head(
    tags$script(
      "$(document).on('shiny:inputchanged', function(event) {
          if (event.name != 'changed') {
            Shiny.setInputValue('changed', event.name);
          }
        });"
    )
  ),
  numericInput("a_1", "a_1", 0),
  textInput("a_2", "a_2"),
  textInput("c", "c"),
  textInput("d", "d"),

  p("changedInputs:"), textOutput("changedInputs"), br(),
  p("aFired:"), textOutput("aFired")
)

server <- function(input, output, session) {
  output$changedInputs <- renderText({
    paste("Outside observer: Latest input fired:", paste(input$changed, collapse = ", "))
  })

  myText <- reactiveVal()

  observeEvent(eventExpr = {
    lapply(grep(pattern = "^a_+[[:digit:]]$|^c$", x = isolate({names(input)}), value = TRUE), function(x){input[[x]]})
  }, handlerExpr = {
    req(input$changed)
    if (input$changed == "a_1") {
      myText("Inside observer: input$a_1 was fired")
    } else  if (input$changed == "a_2") {
      myText("Inside observer: input$a_2 was fired")
    } else {
      myText(paste("Inside observer:", input$changed, "was fired"))
    }
  }, ignoreInit = TRUE)

  output$aFired <- renderText({myText()})

}

shinyApp(ui, server)

在发现实际问题之后并在此处发布我的答案之前,我恢复到了没有的版本reactiveVal()(因为它更接近你的问题)并忘记了isolate。因此,您首先收到的是两个版本的混合版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取在 Shiny 中使用 grep 触发的事件(生成的输入) 的相关文章

  • 有没有一种简单的方法可以根据多个标准进行排名,从而保留 R 中的联系?

    当单个标准排序良好时 rank 函数会返回明显的结果 rank c 2 4 1 3 5 1 2 4 1 3 5 当单个标准具有联系时 排名函数 默认情况下 将平均排名分配给联系 rank c 2 4 1 1 5 1 3 0 4 0 1 5
  • ggplot2 - 添加具有不同中断和标签的辅助 y 轴

    是否可以使用 ggplot2 手动向辅助 y 轴添加中断和标签 see bottom right 我希望在右侧 y 轴上有更紧凑的中断 代表条形 该图将作为基本情况 然后我将展示如何更改辅助 y 轴上的分隔符和标签 sapply c pip
  • 在 mutate 和 across 之后使用 ~separate

    目的是将所有物种 setosa 行转换为一行 setosa 这是一个最小的示例 实际上有更多列和更多组 我有这个数据框 head iris 2 gt select 1 2 5 gt group by Species Sepal Length
  • 使用 data.table 进行分组并选择最短日期

    My Data df1 lt structure list ID c A A A B B C c1 1 6 c2 1 6 myDate c 01 01 2015 02 02 2014 03 01 2014 09 09 2009 10 10
  • 连接多个用户的 R 闪亮会话

    最小可重现示例 library shiny ui lt fluidPage actionButton button1 Run 1 actionButton button2 Run 2 server lt function session i
  • R texreg:如何选择要显示的 gof 统计信息?

    我正在使用 texreg 通过 plm 生成面板回归的输出表 我想抑制所有 gof 统计数据的输出 这不是显示 R2 adj R2 和 N 我只想显示 adj R2 有谁知道一个简单的方法来做到这一点 好吧 这实际上很简单 只需在调用中包含
  • 如何在 R 中为回归量创建“宏”?

    对于长且重复的模型 我想创建一个 宏 在 Stata 中称为 宏 并通过以下命令完成 global var1 var2 其中包含回归量的模型公式 例如来自 library car lm income education prestige d
  • Django 中的 Rpy2 错误 - 未为“”类型的对象定义转换“py2rpy”

    我以前从未使用过 R 并且正在尝试使用 rpy2 从 python 调用 R 函数 它可以在独立的 python 终端上运行 但不能在 Django 中运行 但rpy2似乎无法将python字符串转换为r对象 我正在使用同事提供的自定义库
  • 访问 R 工作区中的数据[重复]

    这个问题在这里已经有答案了 我是自学 R 的 可能有一些非常基本的东西我可能不熟悉 如果是这样我道歉 我正在尝试访问外部来源提供给我的数据 它作为一个工作空间出现 我的流程如下 gt ls 1 2003OHT HR gt attach 20
  • 在 Shiny 中叠加两个 ggplot

    我有一个非常大的数据集 我正在使用 ggplot 在 Shiny 上绘制它 我有一个与 x 轴上的值相关联的滑块 我想用它对选定的数据子集重新着色 并让其余数据保持原样 最简单的选择是重新创建整个绘图 但由于它是一个大型数据集 因此这是一个
  • 美人鱼图:调整图表周围的空白

    我在用 Rstudio 编译的 Rmd 报告中使用了美人鱼图 在 HTML PDF 输出中 图表上方和下方有大量空白 请参见下面的示例 Header Text r library DiagrammeR mermaid graph TD cl
  • Global.asax PostAuthenticateRequest 事件绑定是如何发生的?

    我怎样才能使用发布验证请求Global asax 事件 我正在跟进本教程 http www asp net security tutorials forms authentication configuration and advanced
  • R data.table 连接不等式条件

    我想使用 data table 包根据多个不等式条件对数据进行子集化 data table 手册中的示例展示了如何使用字符变量执行此操作 但不显示数字不等式 我还了解了如何使用子集函数来执行此操作 但我真的很想利用 data table 二
  • 删除缺失的数据值

    我删除了原始帖子 以便能够发布更大版本的数据集 实际上总共有 418 行 这是我正在进行的生存分析的数据 第一列是 ID 号 其他列标记为 V2 V20 有很多缺失的数据 用 表示 我用coxph 函数来获取以下内容 Saves survi
  • 如何将服务器端 Shiny 应用程序嵌入到 JSP 页面中而不将该应用程序暴露在其他地方

    我有一个闪亮的应用程序 我想将其嵌入到托管在 Amazon AWS 上的 Java 8 Web 服务器的页面中 注意 我说 嵌入 是因为网络服务器中的大多数页面共享一个公共侧边栏和页脚 这会自动应用于大多数视图 这样 jsp 文件只需为页面
  • R 错误:无法更改锁定绑定的值

    我试图估计无限数字流的平均值和标准差 当我运行代码时 出现错误消息 无法更改锁定绑定的值 我做了一些研究 发现这个错误与我使用全局变量有关 但我无法弄清楚 任何帮助将非常感激 在此先感谢您的帮助 define global variable
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • dplyr 中的标准评估:全局环境中的函数出现“无法找到函数”错误

    我试图在 dplyr 中对全局环境中的函数使用标准评估 但出现 无法找到函数 错误 这是一些代码 create data frame df lt data frame x rnorm 10 y rnorm 10 define arbitra
  • 通过 Shiny 中的串扰将 Plotly 与 DT 结合使用

    我正在编写一个应用程序来将 csv 文件读取为闪亮的并将散点图与 DT 表链接起来 我几乎遵循了 Plotly 网站上 DT 数据表上的示例 https plot ly r datatable https plot ly r datatab
  • R data.table fwrite 到 fread 空间分隔符并清空

    我在使用 fread 以 作为分隔符和散布的空白值时遇到问题 例如 这个 dt lt data table 1 5 1 5 1 5 make a simple table dt 3 V2 NA add a blank in the midd

随机推荐