在Shiny R中生成表格和可点击图像

use*_*191 1 html javascript r shiny shiny-server

我需要在R中执行以下操作:

1)动态地(对于......中的X图像)创建表格/网格,我在其中显示它们,例如在4xN表格中.

2)使每个图像可点击,以便将其名称输入R中的函数.例如,如果我们点击一​​只猴子,它应该调用一个函数:selected(monkey.jpg).

Joe*_*eng 7

感觉像作弊,但使用一点JS是最简单的方法.

在你的ui.R中,把它放在某个地方(比如你的主面板或其他):

uiOutput("imageGrid"),
tags$script(HTML(
  "$(document).on('click', '.clickimg', function() {",
  "  Shiny.onInputChange('clickimg', $(this).data('value'));",
  "};"
))
Run Code Online (Sandbox Code Playgroud)

在您的服务器功能:

output$imageGrid <- renderUI({
  fluidRow(
    lapply(images, function(img) {
      column(3, 
        tags$img(src=paste0("images/", img), class="clickimg", data-value=img)
      )
    })
  )
})
Run Code Online (Sandbox Code Playgroud)

然后在您的服务器功能中,您可以访问input$clickimg以确定最后单击的图像.请记住,这将是一个反应值(就像任何其他输入一样),因此您必须从反应式表达式或输出渲染函数(或观察者,如果您是一个更高级的Shiny用户)访问它.哦,初始值将是NULL如此,不要忘记检查它.

  • 我认为应该将ui.R中的第5行更改为""});在server.ui中将``和`data-value = img`更改为''data-value'= img`.无论如何,非常有用! (3认同)