Her bir veri tablosu satırında kullanmak üzere bir dizi giriş widget'ı dinamik olarak oluşturmak istiyorum. Tablodaki böyle bir girdi listesini başarıyla görüntüleyebildim, ancak bu dinamik girdilerin değerine erişmekte zorlanıyorum.Bir DataTable çıkışında Parlak girişler kullanma
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))
})
}
birden fazla radioButton giriş oluşturur ve as.character kullanarak HTML temsil dönüştürür bir işlev tanımlar. Bu, kimlikleri "input_1", "input_2" ve "input_3" olan bir dizi giriş oluşturur. Çıkış tablosunun bir sütununu radyo girişleriyle dolduruyorum. RadioButtons'un ekranı beklendiği gibi çalışır. Her sırada bir tane görüyorum. Ancak, input$input_1
, input$input_2
ve input$input_3
görünmüyor ve bu düğmelere tıklamak için bir yanıt yok. Burada neyin yanlış gittiğine dair herhangi bir ipucu büyük ölçüde takdir edilecektir!
Düzenleme: http://www.stackoverflow.red/questions/32993257/shiny-datatables-with-interactive-elements
Parlak girdi nesneleri HTML girişlerini dönüştürmek için datatable görünür işlerken Shiny.bindAll işlevini kullanarak:
Burada bir çözüm buldu.
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()); } ')))
})
Anahtar, "renderUI" öğesini kullanarak dinamik girişler oluşturmaktır. Daha önce cevapladığım bir soru için http://stackoverflow.com/questions/36094718/r-shiny-dynamic-input/36096128#36096128 adresine bakın. –
Teşekkürler, @warmoverflow. “RenderUI” kullanarak girdileri oluşturduktan sonra veri tablosunu bunlarla nasıl doldurabilirim? – Emily
Sadece "input $ input1" vb. Gibi değerleri okuyorsunuz. –