gpt4 book ai didi

r - 在 DataTable 输出中使用 Shiny 输入

转载 作者:行者123 更新时间:2023-12-04 10:37:39 24 4
gpt4 key购买 nike

我想动态创建一系列输入小部件以在数据表的每一行中使用。我能够成功地在表中显示这样的输入列表,但是我无法访问这些动态输入的值。

ui.R

library(shiny)

ui <- fluidPage(

fluidRow(
radioButtons('original','Normal Radio Button',c('1','2','3','4','5')),
DT::dataTableOutput("table")
)
)

服务器.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))
})
}

我定义了一个函数,它生成多个 radioButton 输入并使用 as.character 将它们转换为它们的 HTML 表示形式。这会生成一系列输入,其 ID 为“input_1”、“input_2”和“input_3”。我用 radio 输入填充输出表的一列。 radioButtons 的显示按预期工作。我在每一行看到一个。但是, input$input_1 , input$input_2 , 和 input$input_3似乎不存在,点击这些按钮没有任何 react 。任何关于这里出了什么问题的提示将不胜感激!

编辑:

我在这里找到了解决方案:
http://www.stackoverflow.red/questions/32993257/shiny-datatables-with-interactive-elements

在呈现数据表时使用 Shiny.bindAll 函数似乎可以将 HTML 输入转换为 Shiny 输入对象。
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()); } ')))
})

最佳答案

一个正确的shiny输入对象是 shiny.tag对象,您不能将其放入 data.frame 中。如果这样做,您将收到以下错误消息:

Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class ""shiny.tag"" to a data.frame



在您的示例中, radio_inputs你得到的对象实际上是 character 的列表,这是纯 HTML 代码。因此,您仍然可以获得 UI,但它们不再用作 Shiny 的输入。

如果您想要单选按钮或表格内的任何其他 Shiny 输入对象,我想唯一的方法是使用纯 HTML 表格。

关于r - 在 DataTable 输出中使用 Shiny 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com