【问题标题】:Use selection from gvisTable in shiny在闪亮中使用 gvisTable 中的选择
【发布时间】:2017-01-12 13:47:09
【问题描述】:

快速问题:如何使用/获取闪亮的 gvisTable 的选择?

我可以像这样使用 DT 包来实现这一点:

library(DT)
library(shiny)

server <- function(input, output) {
  output$dt <- renderDataTable({
    datatable(cbind(c(1,2,3,4,5),c(5,4,3,2,1)))
  })

  output$dtselect <- renderText({

    input$dt_rows_selected

  })
}

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      "Selected Rows from Datatable in Text Output"
    ),
    mainPanel(dataTableOutput("dt"),
              textOutput("dtselect"))
  )
)

shinyApp(ui = ui, server = server)

是否可以使用 gvis 获得相同的选择?我用谷歌搜索了很多,但找不到有人用闪亮的方式复制相同的内容。

【问题讨论】:

  • 看到here?否则请澄清您对选择的含义。
  • 我的意思是行选择,从选定的行中获取行/列号
  • 我仍然不清楚你在追求什么。请提供具有预期输出的可重现示例。
  • 希望这个带有 DT 的例子能让它更清楚。

标签: r shiny googlevis


【解决方案1】:

您可以像我一样将listener 添加到options 并将其绑定到一个名为text 的变量

rm(list = ls())
library(shiny)
library(googleVis)

mydata <- as.data.frame(cbind(c(1,2,3,4,5),c(5,4,3,2,1)))

server <- function(input, output) {
  output$myTable <- renderGvis({
    gvisTable(mydata, chartid = "mydata", 
              options = list(gvis.listener.jscode = "var text = data.getValue(chart.getSelection()[0].row,0);Shiny.onInputChange('text', text.toString());"))})
  output$dtselect <- renderText({input$text})
}

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      "Selected Rows from Datatable in Text Output"
    ),
    mainPanel(htmlOutput("myTable"),textOutput("dtselect"))
  )
)

shinyApp(ui = ui, server = server)

【讨论】:

    【解决方案2】:

    处理多项选择的变体(如here 所述)

    library(googleVis)
    library(shiny)
    mydata <- as.data.frame(cbind(c(1,2,3,4,5),c(5,4,3,2,1)))
    shinyApp(
      ui = fluidPage(
          htmlOutput("myTable")
        )
      ,
      server = function(input,output){
        observe({
          print(input$r_select)
        })
    
        output$myTable <- renderGvis({
         gt= gvisTable(mydata,chartid="mydata")
         jsInsert ="
          google.visualization.events.addListener(chart, 'select', selectHandler);
          var selectedRows = new Array(); 
          function selectHandler() {  
            var selection = chart.getSelection(); 
            for (var idx in selection){ 
                var item = selection[idx]; 
                if (item) { 
                  i = selectedRows.indexOf(item.row); 
                  if (i == -1){ 
                      selectedRows.push(item.row); 
                      data.setProperty(item.row, 0,'style','background-color:#d6e9f8;'); 
                      data.setProperty(item.row, 1,'style','background-color:#d6e9f8;'); 
                } else { 
                 selectedRows.splice(i,1); 
                 data.setProperty(item.row,0,'style',null); 
                 data.setProperty(item.row,1,'style',null); 
                }  
              } 
            } 
          chart.setSelection(null);  
          Shiny.onInputChange('r_select',selectedRows);      
             chart.draw(data,options);         
        }
        chart.draw(data,options);
         "
         gt$html$chart[['jsDrawChart']] <- gsub("chart.draw\\(data,options\\);", jsInsert, gt$html$chart[['jsDrawChart']])
         gt
        }) 
      }
    )
    

    在观察中打印所选行的值。 索引从 0 开始

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 2018-10-01
      • 2014-09-02
      • 2016-03-14
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多