我已经通过出色的教程here阅读了自己。但是,我对jQuery的了解为零。我在ShinyApp中使用了几个tabPanels来显示我的数据。本教程介绍了如何跟踪链接单击事件(效果很好,我在本教程中介绍了一个.js)。有没有一种方法可以跟踪用户是否单击特定的tabPanel(例如Panel1
和Panel2
)?我尝试使用指向外部资源的链接进行相同的操作,但这不起作用。
tabsetPanel(
tabPanel("Panel1", showOutput("PlotPanel1", 'dimple')),
tabPanel("Panel2", showOutput("PlotPanel2", 'dimple')))
编辑:
我想我必须在我的analytics.js文件中包含一些代码。因此,我尝试了几种方法,但是坦率地说,由于不了解jQuery,这是错误的。有人可以帮忙吗?
$( ".selector" ).tabs({
on('option', 'click', function(l) {
ga('send', 'event', 'tabPanel', 'tabPanel', $(l.currentTarget).val());
}
});
谢谢。
最佳答案
如果我正确地获得了输出所需的内容,则可以执行以下操作(我不使用javascript):
ui <- fluidPage(
#give an id to your tab in order to monitor it in the server
tabsetPanel(id = 'tab123',
tabPanel("Panel1", textOutput("PlotPanel1")),
tabPanel("Panel2", textOutput("PlotPanel2"))
)
)
server <- function(input, output) {
#now server can monitor the tabPanel through the id.
#make the observer do whatever you want, e.g. print to a file
observeEvent(input$tab123, {
print(input$tab123)
if (input$tab123 == 'Panel1') {
sink(file = 'c:/Users/TB/Documents/panel1.txt', append = TRUE)
cat(1)
sink()
} else {
sink(file = 'c:/Users/TB/Documents/panel2.txt', append = TRUE)
cat(1)
sink()
}
})
}
shinyApp(ui, server)
首先,给您的
tabsetPanel
指定一个ID。现在服务器可以访问选项卡数据了,您可以使用observeEvent
创建一个要观察的事件。每次用户单击每个选项卡时,print都会在控制台上打印选项卡名称(供您查看input$tab123
变量包含的内容)。然后,您可以使用该信息做任何您想做的事情。可能将其存储在带有时间戳的数据库中。在上面的示例中,它在我的文档中创建了两个文件,每当有人单击选项卡时,它就会写入值1。然后,您只需读入文件并对其求和即可。