代码之家  ›  专栏  ›  技术社区  ›  user1577191

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

  •  3
  • user1577191  · 技术社区  · 10 年前

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

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

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

    1 回复  |  直到 10 年前
        1
  •  9
  •   Joe Cheng    10 年前

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

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

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

    在服务器功能中:

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

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