Я хотел бы иметь рабочий пример, подобный этому: https://demo.shinyapps.io/029-row-selection/
Я пробовал использовать этот пример на своем сервере Shiny, на котором запущены 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")
)
)
)