RStudio检查数据表中的行的列表
我希望有一个类似的工作示例: 我在运行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输入、输出{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
输出$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不断发展,我不再是一个活跃用户。我相信每个人都会欣赏你的调查结果。