2016-03-24 7 views
3

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()); } '))) 
}) 
+0

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. –

+0

Teşekkürler, @warmoverflow. “RenderUI” kullanarak girdileri oluşturduktan sonra veri tablosunu bunlarla nasıl doldurabilirim? – Emily

+0

Sadece "input $ input1" vb. Gibi değerleri okuyorsunuz. –

cevap

0

Doğru shiny giriş nesnesi bir data.frame ifade edilemez bir shiny.tag nesnesidir. as.data.frame.default içinde

Hata ([i] [], isteğe bağlı = DOĞRU, stringsAsFactors = stringsAsFactors x): sınıfı zorlamak olamaz Bunu yaparsanız, aşağıdaki hata iletisini alırsınız "senin örnekte bir data.frame

için" shiny.tag "" elde edersiniz radio_inputs nesnenin aslında saf HTML kodu character bir listesidir. Böylece UI'yi hala alıyorsunuz, ancak artık parlak girdiler olarak çalışmıyorlar.

Tek yol, bir tablo içinde radyo düğmeleri veya başka parlak girdi nesneleri istiyorsanız, saf bir HTML tablosu kullanmaktır.