我需要在 R 中执行以下操作:
1)动态(对于...中的X图像)创建一个表格/网格,我在其中显示它们,例如在4xN表格中。
2) 使这些图像中的每一个都可点击,以便将其名称输入到 R 中的一个函数中。例如,如果我们点击一只猴子,它应该调用一个函数:selected(monkey.jpg)。
我需要在 R 中执行以下操作:
1)动态(对于...中的X图像)创建一个表格/网格,我在其中显示它们,例如在4xN表格中。
2) 使这些图像中的每一个都可点击,以便将其名称输入到 R 中的一个函数中。例如,如果我们点击一只猴子,它应该调用一个函数:selected(monkey.jpg)。
感觉像作弊,但使用一点 JS 是最简单的方法。
在您的 ui.R 中,将其放在某个地方(例如在您的 mainPanel 或其他任何地方):
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
所以不要忘记检查它。