如何在 Shiny 中获得一个按钮来并行调用 JavaScript 和 R 代码?

2024-04-26

我在 Shiny 中有一个 HTML 按钮,单击该按钮时会调用 JavaScript 函数geocodeAddressStreet(...) in a .js文件在/www目录:

tags$body(tags$input(type = "button", 
                     value = "Next", 
                     id = "button1", 
                     onClick = "geocodeAddressStreet(houseNumber,streetName,addressCity,addressState)"))),

但是我不知道如何让这个按钮在单击时调用第二个文件,比方说foo.R。两个程序独立运行,但似乎没有办法添加一个inputId到 Shiny 中的 HTML 元素。我们目前有两个不同的按钮,其中一个调用 R 代码,另一个调用 JavaScript 代码,但这显然是一个不切实际的解决方案。


那么您想要一个按钮,当您单击它时,JavaScript 函数和一些 R 代码都会被调用?我能够用onclick函数从shinyjs https://github.com/daattali/shinyjs包(免责声明:我写了这个包)

library(shinyjs)

jsCode <- "
shinyjs.geocodeAddr = function(params) {
  alert('JavaScript called!');
  // geocodeAddressStreet(...)
}
"

runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    extendShinyjs(text = jsCode),
    actionButton("btn", "Click me")
  ),
  server = function(input, output, session) {
    onclick("btn", {
      js$geocodeAddr()
      cat("R called as well")
    })
  }
))

基本上,onclickfunction 是一个 R 函数,单击按钮时将运行。在其中,您显然可以轻松调用 R 代码,但您也可以使用shinyjs 包调用 JS 代码——这就是我调用js$geocodeAddr。看着那(这extendShinyjs功能。或者,不使用extendShinyjs(),您也可以使用通常的方法session$sendCustomMessage(...)

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

如何在 Shiny 中获得一个按钮来并行调用 JavaScript 和 R 代码? 的相关文章

随机推荐