简体   繁体   English

R shiny 带有反应列和弹出工具提示的数据表

[英]R shiny Datatable with Reactive Columns and Popover Tooltips

Does anyone know how to integrate reactive columns with popover tooltips in R shiny?有谁知道如何在 R shiny 中将反应列与弹出工具提示集成?

I have some working code for reactive columns using Datatable based off this post and code:根据这篇文章和代码,我有一些使用 Datatable 的反应列的工作代码:

library(shiny)
library(DT)

server<-function(input, output,session) { 
  
  shinyInput <- function(FUN, len, id, ivals, ...) {
    inputs <- numeric(len)
    for (i in seq_len(len)) {
      inputs[i] <- as.character(
        FUN(paste0(id, i), label = NULL,
            value=ivals[i],...)
      )
    }
    inputs
  }
  
  it_df <- reactive({
    data.frame(
      Parameters = rep("X",7),
      Values = shinyInput(numericInput, 7,
                          'param_values', 
                          numeric(7),
                          width = '100%'),
      stringsAsFactors = FALSE
    )
  })
  output$param_table <- DT::renderDataTable(
    datatable(it_df(),escape = FALSE,
              options = list(
                preDrawCallback = JS("function() { Shiny.unbindAll(this.api().table().node());}"),
                drawCallback = JS("function() { Shiny.bindAll(this.api().table().node());}")
              )
    ))
}

ui <- fluidPage( DT::dataTableOutput('param_table'))

shinyApp(ui,server)

I also have some working code for popover tooltips based off this post and code:根据这篇文章和代码,我还有一些用于弹出工具提示的工作代码:

library(shiny)
library(DT)

ui<-shinyUI(
  mainPanel(
    DT::dataTableOutput("tbl")
  )   
) 

server<-shinyServer(function(input, output,session) {
  output$tbl = DT::renderDataTable(
    datatable(iris[1:5, ], callback = JS("
                                    var tips = ['First row name', 'Second row name', 'Third row name',
                                    'Fourth row name', 'Fifth row name'],
                                    firstColumn = $('#tbl tr td:first-child');
                                    for (var i = 0; i < tips.length; i++) {
                                    $(firstColumn[i]).attr('title', tips[i]);
                                    }")), server = FALSE)
}) 

shinyApp(ui = ui, server = server)

But I'm having a lot of trouble combining the two.但是我在将两者结合起来时遇到了很多麻烦。 Partly due to my lack of JS knowledge.部分原因是我缺乏 JS 知识。

Thanks and any help is much appreciated!谢谢,非常感谢任何帮助!

Just combine two javascript code that you provided in one datatable function.只需将您在一个数据表 function 中提供的两个datatable代码组合起来。 This should work:这应该有效:

library(shiny)
library(DT)

ui<-shinyUI(
  mainPanel(
    DT::dataTableOutput("tbl")
  )   
) 

server<-shinyServer(function(input, output,session) {
  shinyInput <- function(FUN, len, id, ivals, ...) {
    inputs <- numeric(len)
    for (i in seq_len(len)) {
      inputs[i] <- as.character(
        FUN(paste0(id, i), label = NULL,
            value=ivals[i],...)
      )
    }
    inputs
  }
  
  it_df <- reactive({
    data.frame(
      Parameters = rep("X",5),
      Values = shinyInput(numericInput, 5,
                          'param_values', 
                          numeric(5),
                          width = '100%'),
      stringsAsFactors = FALSE
    )
  })
  output$tbl = DT::renderDataTable(
    datatable(it_df(), escape = FALSE, options = list(
      preDrawCallback = JS("function() { Shiny.unbindAll(this.api().table().node());}"),
      drawCallback = JS("function() { Shiny.bindAll(this.api().table().node());}")
    ),
    callback = JS("
                                    var tips = ['First row name', 'Second row name', 'Third row name',
                                    'Fourth row name', 'Fifth row name'],
                                    firstColumn = $('#tbl tr td:first-child');
                                    for (var i = 0; i < tips.length; i++) {
                                    $(firstColumn[i]).attr('title', tips[i]);
                                    }")), server = FALSE)
}) 

shinyApp(ui = ui, server = server)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM