Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RStudio检查数据表中的行的列表_R_Datatables_Shiny - Fatal编程技术网

RStudio检查数据表中的行的列表

RStudio检查数据表中的行的列表,r,datatables,shiny,R,Datatables,Shiny,我希望有一个类似的工作示例: 我在运行Shinny server v1.1.0.10000、packageVersion:0.10.0和Node.js v0.10.21的Shinny server中尝试了这个示例,但即使我从网站加载js和css文件,它也不起作用。它只是不从表中选择行: 用户界面 有光泽的图书馆 shinyUIfluidPage title='数据表中的行选择', 标签列表 singletontags$headtags$scriptsrc='//cdn.datatables.n

我希望有一个类似的工作示例:

我在运行Shinny server v1.1.0.10000、packageVersion:0.10.0和Node.js v0.10.21的Shinny server中尝试了这个示例,但即使我从网站加载js和css文件,它也不起作用。它只是不从表中选择行:

用户界面 有光泽的图书馆 shinyUIfluidPage title='数据表中的行选择', 标签列表 singletontags$headtags$scriptsrc='//cdn.datatables.net/1.10.2/js/jquery.datatables.js',type='text/javascript', singletontags$headtags$scriptsrc='//cdn.datatables.net/1.10.2/css/jquery.datatables.min.css',type='text/css' , 侧边栏布局 sidebarPaneltextOutput'rows\u out', mainPaneldataTableOutput'tbl', 位置='右' 服务器.R 有光泽的图书馆 ShinyServerFunction输入、输出{
输出$tbl对于第一个问题,您需要安装Shining和htmltools>=0.2.6的开发版本:

# devtools::install_github("rstudio/htmltools")
# devtools::install_github("rstudio/shiny")
library(shiny)
runApp(list(ui = fluidPage(
  title = 'Row selection in DataTables',
  sidebarLayout(
    sidebarPanel(textOutput('rows_out')),
    mainPanel(dataTableOutput('tbl')),
    position = 'right'
  )
)
, server = function(input, output) {
  output$tbl <- renderDataTable(
    mtcars,
    options = list(pageLength = 10),
    callback = "function(table) {
    table.on('click.dt', 'tr', function() {
    $(this).toggleClass('selected');
    Shiny.onInputChange('rows',
    table.rows('.selected').indexes().toArray());
    });
}"
  )
  output$rows_out <- renderText({
    paste(c('You selected these rows on the page:', input$rows),
          collapse = ' ')
  })
}
)
)
第二个例子是:

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); 
    });
}")
  }
  )
)

基于前面的答案代码和JQuery/JavaScript的一些调整,我为表中的复选框做了一个选择

对于喜欢实际数据而不是行号的人,我编写了这段代码,从表中提取数据并将其显示为选择。您可以通过再次单击来取消选择。它建立在对我非常有帮助的以前的答案的基础上。谢谢,所以我也想分享这段代码

它需要一个会话对象来保持向量的活动范围。实际上,您可以从表中获得任何想要的信息,只需深入JQuery并更改$行。find'td:nth-child2'号是列号。我需要第二列的信息,但这取决于您。如果您也更改可见列,则选择颜色有点奇怪数量…选择颜色往往会消失

我希望这是有帮助的,对我来说工作需要优化,但现在没有时间

output$tbl <- renderDataTable(
  mtcars,
  options = list(pageLength = 6),
  callback = "function(table) {
  table.on('click.dt', 'tr', function() {

  if ( $(this).hasClass('selected') ) {
    $(this).removeClass('selected');
  } else {
    table.$('tr.selected').removeClass('selected');
    $(this).addClass('selected');
  }

  var $row = $(this).closest('tr'),       
    $tdsROW = $row.find('td'),
    $tdsUSER = $row.find('td:nth-child(2)');

  $.each($tdsROW, function() {               
    console.log($(this).text());        
  });

  Shiny.onInputChange('rows',table.rows('.selected').indexes().toArray());
  Shiny.onInputChange('CELLselected',$tdsUSER.text());
  Shiny.onInputChange('ROWselected',$(this).text());

  });
  }"
)

output$rows_out <- renderUI({
  infoROW <- input$rows
  if(length(input$CELLselected)>0){
    if(input$CELLselected %in%  session$SelectedCell){
      session$SelectedCell <- session$SelectedCell[session$SelectedCell != input$CELLselected]
    }else{
      session$SelectedCell <- append(session$SelectedCell,input$CELLselected)
    }
  }
  htmlTXT <- ""
  if(length(session$SelectedCell)>0){
    for(i in 1:length(session$SelectedCell)){
      htmlTXT <- paste(htmlTXT,session$SelectedCell[i],sep="<br/>")
    }
  }else{htmlTXT <- "please select from the table"}
  HTML(htmlTXT)
})
已在Shining 0.11.1中被渲染为已损坏,但可以轻松修复。以下是完成此操作的更新:

向renderDataTable添加了转义参数以转义HTML实体 出于安全原因,在数据表中。这可能会使表与以前的表断开 在表内容和旧行为中使用原始HTML的版本 如果您意识到安全性,则可以通过escape=FALSE返回 影响627


因此,要使以前的解决方案起作用,必须将escape=FALSE指定为renderDataTable的选项。

上述答案已过时。我在datatable中收到错误:“callback”参数仅接受JS返回的值


相反,它适合我。

我最后使用了第二个示例,它在无需更新软件的情况下运行良好。Is input[[rows]]所选行的值?因为我有一个类似的示例,无法获取选中行的值。请澄清。给定的链接现在已断开。我尝试按原样运行代码,并使用escape=FALSE,但收到警告:datatable中出错:“callback”参数两次都只接受从JS返回的值。正在运行0.13.2.调查…我已经更新了链接,他们将其从NEWS改为NEWS.md。Shiny的API不断发展,我不再是一个活跃用户。我相信每个人都会欣赏你的调查结果。