Ich möchte dynamisch eine Reihe von Eingabe-Widgets erstellen, die in jeder Datentabelle verwendet werden. Ich bin in der Lage, eine solche Liste von Eingängen in der Tabelle anzuzeigen, habe jedoch Probleme beim Zugriff auf den Wert dieser dynamischen Eingänge.Verwenden von Shiny-Eingängen innerhalb einer DataTable-Ausgabe
ui.R
library(shiny)
ui <- fluidPage(
fluidRow(
radioButtons('original','Normal Radio Button',c('1','2','3','4','5')),
DT::dataTableOutput("table")
)
)
server.R
library(DT)
multipleRadio <- function(FUN, id_nums, id_base, label, choices, ...) {
inputs <- 1:length(id_nums)
for (i in 1:length(inputs)) {
inputs[i] <- as.character(FUN(paste0(id_base, id_nums[i]),label, choices, ...))
}
return(inputs)
}
radio_inputs <- multipleRadio(radioButtons,
as.character(1:3),
'input_',
'Radio Button',
c('1','2','3','4','5'),
inline = TRUE)
output_table <- data.frame(id = c(1,2,3),
name=c('Item 1','Item 2','Item 3'),
select = radio_inputs)
server <- function(input, output, session) {
observe({
print(paste('original: ',input$original))
print(paste('input 1: ',input$input_1))
print(paste('input 2: ',input$input_2))
print(paste('input 3: ',input$input_3))
})
output$table <- renderDataTable({
datatable(output_table,rownames= FALSE,escape = FALSE,selection='single',
options = list(paging = FALSE,ordering=FALSE,searching=FALSE))
})
}
I definieren, eine Funktion, die Eingänge mehrerer radiobutton erzeugt und wandelt diese in ihre HTML-Darstellung as.character verwenden. Dies erzeugt eine Reihe von Eingängen, deren IDs "Eingang_1", "Eingang_2" und "Eingang_3" sind. Ich fülle eine Spalte der Ausgabetabelle mit den Radioeingaben. Die Anzeige der radioButtons funktioniert wie erwartet. Ich sehe eins in jeder Reihe. input$input_1
, input$input_2
und input$input_3
scheinen jedoch nicht zu existieren und es gibt keine Antwort auf das Klicken auf diese Schaltflächen. Irgendwelche Tipps, was hier falsch läuft, würden sehr geschätzt werden!
Edit:
fand ich hier eine Lösung: http://www.stackoverflow.red/questions/32993257/shiny-datatables-with-interactive-elements
Mit der Shiny.bindAll Funktion, wenn die Datentabelle erscheint Rendern der HTML-Eingänge in Shiny Eingabeobjekte zu konvertieren.
output$table <- renderDataTable({
datatable(output_table,rownames= FALSE,escape = FALSE,selection='single',
options = list(paging = FALSE,ordering=FALSE,searching=FALSE,
preDrawCallback=JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
drawCallback=JS('function() { Shiny.bindAll(this.api().table().node()); } ')))
})
Der Schlüssel besteht darin, die dynamischen Eingaben mit 'renderUI' zu erstellen. Siehe http://stackoverflow.com/questions/36094718/r-shiny-dynamic-input/36096128#36096128 für eine Frage, die ich zuvor beantwortet habe. –
Danke, @warmoverflow. Sobald ich die Eingaben mit 'renderUI' erzeuge, wie fülle ich die Datentabelle mit ihnen? – Emily
Sie lesen nur den Wert wie 'input $ input1' usw. –