我使用动态数量的图创建了一个闪亮的应用,类似于this问题。它应该作为一些结果的概述 - 现在我想添加(双)点击一个图的可能性,以便做某事(例如只显示这一个有更多细节)。
我查看了interactive plots的教程。但是,我无法确定将侦听器放在我的代码中的单击输入事件的位置。它们总是返回NULL,我认为这是由于在生成绘图之前代码被执行的事实。以下是我创建图表的方法:
createPlots <- reactive ({
numberOfFiles <- length(densityResult)
if (numberOfFiles == 0)
return(NULL)
# Call renderPlot for each one. Plots are only actually generated when they
# are visible on the web page.
for (i in filesAnalyzed) {
# Need local so that each item gets its own number. Without it, the value
# of i in the renderPlot() will be the same across all instances, because
# of when the expression is evaluated.
local({
my_i <- i
plotname <- paste("densityPlot", my_i, sep="")
result <- densityResult[[my_i]]
output[[plotname]] <- renderPlot({
plot(result$data, main=my_i, pch=19,cex=0.2, col= ColoursUsed[result$clusters])
dev.off()
})
}
})
})
output$plots <- renderUI({
createPlots()
plot_output_list <- lapply(1:length(filesAnalyzed), function(i) {
plotname <- paste("densityPlot", filesAnalyzed[i], sep="")
plotOutput(plotname, dblclick = dblclickOpts(id = paste(plotname, "_click", sep = "")))
})
# Convert the list to a tagList - this is necessary for the list of items
# to display properly.
do.call(tagList, plot_output_list)
})
我创建了一个用于测试的文本输出,它应该显示所选绘图的 id :
output$click_info <- renderUI({
numberOfPlots <- length(densityResult)
lapply(1:numberOfPlots, function(i) {
renderText(input[[paste("densityPlot", names(densityResult)[i], "_click", sep = "")]])
})
})
然而,正如我之前所说,结果是NULL或者,就像在这种情况下,元素根本就没有被显示。 (我尝试了不同的版本,甚至硬编码第一个输入元素的名称)。使用RStudios调试,我可以跟进代码在创建图之前运行。如何在生成图表后访问输入元素?
编辑:可以找到最小的示例here。