我已经通过出色的教程here阅读了自己。但是,我对jQuery的了解为零。我在ShinyApp中使用了几个tabPanels来显示我的数据。本教程介绍了如何跟踪链接单击事件(效果很好,我在本教程中介绍了一个.js)。有没有一种方法可以跟踪用户是否单击特定的tabPanel(例如Panel1Panel2)?我尝试使用指向外部资源的链接进行相同的操作,但这不起作用。

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。然后,您只需读入文件并对其求和即可。

08-25 04:06