R:动态操作按钮行

R:动态操作按钮行,r,shiny,R,Shiny,我希望在Shiny中有一组两个操作按钮,其中inputID和重复数基于data.frame中的行数。下面是我的思维过程,目前运行不正常。我希望“n”组按钮等于data.frame中的行数,而不是在按下按钮时添加按钮 library(shiny) ui <- basicPage( fluidRow( actionButton(inputId = "add_button", label = "Add Button") ), uiOutput("more_but

我希望在Shiny中有一组两个操作按钮,其中inputID和重复数基于data.frame中的行数。下面是我的思维过程,目前运行不正常。我希望“n”组按钮等于data.frame中的行数,而不是在按下按钮时添加按钮

library(shiny)

ui <- basicPage(
fluidRow(
 actionButton(inputId = "add_button",
             label = "Add Button")
 ),
 uiOutput("more_buttons")
 )

server <- function(input, output){

 rvs      <- reactiveValues(buttons = list(actionButton(inputId = "button1",
                                                     label = 1)))

observeEvent(eventExpr = input$add_button,
           handlerExpr = {
             len      <- length(rvs$buttons) + 1
             rvs$buttons[[len]] <- actionButton(inputId = paste0("button",len),
                                                label = len)
           })

 output$more_buttons <- renderUI({
  do.call(fluidRow, rvs$buttons)
   })

 observeEvent(rvs$buttons,{
for(ii in 1:length(rvs$buttons)){
  local({
    i <- ii
    observeEvent(eventExpr = input[[paste0("button",i)]],
                 handlerExpr = {print(sprintf("You clicked btn number %d",i))})
  })
  }
 })

}

shinyApp(ui, server)
库(闪亮)

ui这里是您想要完成的任务的简化版本

ui <- fluidPage(
  selectInput("df", "choose a dataframe",
              c("mtcars", "mpg")),
  uiOutput("buttons")
)

server = function(input, output, session){
  reactiveFrame = reactive({
    if(input$df == "mtcars")
      return(mtcars)
    return(ggplot2::mpg)
  })
  nrowR = reactive({
    nrow(reactiveFrame())
  })
  m <- 0
  output$buttons = renderUI({
    m <- m+1
    do.call(
      fluidPage,
      lapply(
        1:nrowR(),
        function(i)
          span(
            actionButton(paste0("a", i, "-", m),paste0("a", i)),
            actionButton(paste0("b", i, "-", m),paste0("b", i))
          )
      )
    )
  })
}

shinyApp(ui,server)

ui您的示例不起作用。“好像有不平衡的括号。”格雷戈德西莉亚我添加了一个不同的版本。这会在每次按下“添加按钮”时添加一个按钮,但我需要一对按钮,其中对数等于数据框中的行数。数据框是否为反应式?我无法运行该按钮。当我尝试的时候,我总是得到一个长度为零的参数。它现在可以工作了。我想知道您是如何生成单个按钮的函数(I),是否可以添加第二个,从而为每行生成一对按钮?我只是更改了代码,为每行创建了两个按钮。我建议您查看
do.call
lappy
的文档,以进一步自定义该方法。当我呈现UI时,我没有看到生成任何按钮。我遗漏了什么吗?我遗漏了一个逗号。再试一次。