Мне было интересно, возможно ли добавить две (или более) кнопки радиогруппы в таблицу DT в блестящем. На этой странице кажется, что добавить одну довольно просто: https://rstudio.github.io/DT/011-radio.html
Тем не менее, я борюсь с возможностью добавить две радиогруппы. Вот мой код:
library(shiny)
ui <- bootstrapPage(DT::dataTableOutput("DT_table"))
server <- function(input, output) {
output$DT_table <- DT::renderDataTable({
m <- matrix(
as.character(1:5), nrow = 12, ncol = 5, byrow = TRUE,
dimnames = list(month.abb, LETTERS[1:5])
)
n <- matrix(
as.character(1:5), nrow = 12, ncol = 5, byrow = TRUE,
dimnames = list(month.abb, paste("P", LETTERS[1:5], sep = "_"))
)
for (i in seq_len(nrow(m))) {
m[i, ] = sprintf(
'<input type="radio" name="%s" value="%s"/>',
month.abb[i], m[i, ]
)
}
for (i in seq_len(nrow(n))) {
n[i, ] = sprintf(
'<input type="radio" name="%s" value="%s"/>',
paste0("T2", month.abb[i]), n[i, ]
)
}
dataset <- as.data.frame(cbind(m, n))
DT::datatable(dataset, selection = 'none', escape = FALSE, options = list(dom = 't', paging = FALSE, ordering = FALSE),
callback = DT::JS("table.rows().every(function(i, tab, row) {
var $this = $(this.node());
$this.attr('id', this.data()[0]);
$this.addClass('shiny-input-radiogroup');
});
Shiny.unbindAll(table.table().node());
Shiny.bindAll(table.table().node());")
)}, server = FALSE)
observe({
print(input$Jan)
print(input$T2Jan)
})
}
shinyApp(ui = ui, server = server)
Я ясно вижу, что проблема связана с моим аргументом обратного вызова, который применяет текст глянцевый-input-radiogroup / id ко всей строке, а не к каждой радиогруппе каждой строки,Как видите, мой ввод $ T2Jan всегда равен NULL. Я действительно новичок в javascript, поэтому понятия не имею, с чего начать.
Как вы думаете, возможно ли это с помощью небольшого количества манипуляций с javascript, или лучше просто создать другой объект данных рядом с первым?