搜索
查看: 1958|回复: 0

shiny的DT包控制表格任意显示列或者选择行

[复制链接]

634

主题

1182

帖子

4030

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4030
发表于 2017-3-30 10:41:47 | 显示全部楼层 |阅读模式
表格任意显示列,其实本身就有控件,https://rstudio.github.io/DT/shiny.html 可以找到。
是yihui xie做的这个功能:https://yihui.shinyapps.io/DT-rows/
用 DT来显示一个表格,这样就可以在表格里面点击选中一些行,这些行就可以传递给变量input$x1_rows_selected 从而被其它地方应用
其中X1是被选中的表格的name,选中的行都在input$x1_rows_selected这个向量里面。

选择行,其实也有回调函数,但是也可以用JS来实现。

[AppleScript] 纯文本查看 复制代码

library(shiny)
mymtcars = mtcars
mymtcars$id = 1:nrow(mtcars)
runApp(
  list(ui = pageWithSidebar(
    headerPanel('Examples of DataTables'),
    sidebarPanel(
      checkboxGroupInput('show_vars', 'Columns to show:', names(mymtcars),
                         selected = names(mymtcars))
      ,textInput("collection_txt",label="Foo")
    ),
    mainPanel(
      dataTableOutput("mytable")
    )
  )
  , server = function(input, output, session) {
    rowSelect <- reactive({
      paste(sort(unique(input[["rows"]])),sep=',')
    })
    observe({
      updateTextInput(session, "collection_txt", value = rowSelect() ,label = "Foo:" )
    })
    output$mytable = renderDataTable({
      addCheckboxButtons <- paste0('<input type="checkbox" name="row', mymtcars$id, '" value="', mymtcars$id, '">',"")
      #Display table with checkbox buttons
      cbind(Pick=addCheckboxButtons, mymtcars[, input$show_vars, drop=FALSE])
    }, options = list(orderClasses = TRUE, lengthMenu = c(5, 25, 50), pageLength = 25)
    , callback = "function(table) {
    table.on('change.dt', 'tr td input:checkbox', function() {
    setTimeout(function () {
    Shiny.onInputChange('rows', $(this).add('tr td input:checkbox:checked').parent().siblings(':last-child').map(function() {
    return $(this).text();
    }).get())
    }, 10); 
    });
  }", escape = FALSE) ## end for renderDataTable
  }
  )
)


看懂这个优秀的例子就好啦~~
你这个问题很复杂,需要打赏,请点击 http://www.bio-info-trainee.com/donate 进行打赏,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-10-21 09:26 , Processed in 0.029318 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.