我想动态创建一系列输入小部件,以便在每一行数据表中使用。我成功地能够在表格中显示这样的输入列表,但是我无法访问这些动态输入的值。
ui.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))
})
}
server.R
input$input_1
我定义了一个生成多个radioButton输入的函数,并使用as.character将它们转换为HTML表示形式。这会生成一系列输入,其ID为&#34; input_1&#34;,&#34; input_2&#34;和&#34; input_3。&#34;我用无线电输入填充输出表的一列。 radioButtons的显示按预期工作。我看到每排一个。但是,input$input_2
,input$input_3
和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()); } ')))
})
似乎不存在,并且没有点击这些按钮的响应。关于这里出了什么问题的任何提示将不胜感激!
修改
我在这里找到了一个解决方案: http://www.stackoverflow.red/questions/32993257/shiny-datatables-with-interactive-elements
渲染数据表时使用Shiny.bindAll函数会将HTML输入转换为Shiny输入对象。
import numpy as np
a = [[1,2],[3,1]]
b = [[3,6],[2,9]]
c = [[5,1],[8,10]]
print np.hstack((np.hstack((a,b)),c))
# [[ 1 2 3 6 5 1]
# [ 3 1 2 9 8 10]]
答案 0 :(得分:0)
正确的shiny
输入对象是shiny.tag
对象,您无法将其放入data.frame中。如果这样做,您将收到以下错误消息:
as.data.frame.default(x [[i]],可选= TRUE时出错, stringsAsFactors = stringsAsFactors):不能强制类 “”shiny.tag“”到data.frame
在您的示例中,您获得的radio_inputs
对象实际上是character
的列表,它是纯HTML代码。因此,你仍然可以获得用户界面,但它们不再是闪亮的输入。
我想唯一的方法是使用纯HTML表格,如果你想在表格中使用单选按钮或任何其他闪亮的输入对象。