Я хотел бы иметь рабочий пример, подобный этому: https://demo.shinyapps.io/029-row-selection/
Я попробовал этот пример на моем блестящем сервере под управлением Shiny Server v1.1.0.10000
, packageVersion: 0.10.0
и Node.js v0.10.21
, но он не работает, даже если я загружаю js и css файлы с веб-сайта. Он просто не выбирает строки из таблицы:
# ui.R
library(shiny)
shinyUI(fluidPage(
title = 'Row selection in DataTables',
tagList(
singleton(tags$head(tags$script(src='//cdn.datatables.net/1.10.2/js/jquery.dataTables.js',type='text/javascript'))),
singleton(tags$head(tags$script(src='//cdn.datatables.net/1.10.2/css/jquery.dataTables.min.css',type='text/css')))
),
sidebarLayout(
sidebarPanel(textOutput('rows_out')),
mainPanel(dataTableOutput('tbl')),
position = 'right'
)
))
# server.R
library(shiny)
shinyServer(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 = ' ')
})
})
Затем я попытался сделать это из другого примера, который использовал переключатели для повторной сортировки строк.
В моем измененном примере я хочу создать список идентификаторов из выбранных флажков в таблице dataTables, показанной на веб-странице. Например, выбирая некоторые строки из первых 5, я хочу, чтобы мое текстовое поле было: 1,3,4
, соответствующее столбцу mymtcars$id
, добавленному в mtcars. Затем я планирую связать действие со значениями текстового поля.
У меня есть это почти в этом примере, но при проверке ящиков не обновляется список в текстовом поле. В отличие от примера shinyapp, я бы хотел, чтобы мои флажки сохраняли статус выбора, если эта таблица используется. Это может быть сложной частью, и я не уверен, как это сделать. Я также хотел бы добавить в верхнем левом углу таблицы текстовое поле "Выбрать/отменить выбор", которое выбирает/отменяет выбор всех полей в таблице. Любые идеи?
# server.R
library(shiny)
mymtcars = mtcars
mymtcars$id = 1:nrow(mtcars)
shinyServer(function(input, output, session) {
rowSelect <- reactive({
if (is.null(input[["row"]])) {
paste(sort(unique(rep(0,nrow(mymtcars)))),sep=',')
} else {
paste(sort(unique(input[["row"]])),sep=',')
}
})
observe({
updateTextInput(session, "collection_txt",
value = rowSelect()
,label = "Foo:"
)
})
# sorted columns are colored now because CSS are attached to them
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(bSortClasses = TRUE, aLengthMenu = c(5, 25, 50), iDisplayLength = 25))
})
# ui.R
library(shiny)
mymtcars = mtcars
mymtcars$id = 1:nrow(mtcars)
shinyUI(pageWithSidebar(
headerPanel('Examples of DataTables'),
sidebarPanel(
checkboxGroupInput('show_vars', 'Columns to show:', names(mymtcars),
selected = names(mymtcars))
),
mainPanel(
dataTableOutput("mytable")
,textInput("collection_txt",label="Foo")
)
)
)