【问题标题】:R Shiny: Dynamic Row of Action ButtonsR Shiny:动作按钮的动态行
【发布时间】:2017-06-29 21:04:03
【问题描述】:

我希望在 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)

【问题讨论】:

  • 您的示例不起作用。好像有不平衡的括号。
  • @GregordeCillia 我添加了一个不同的版本。每次按下“add_button”时都会添加一个按钮,但我想要一对按钮,其中对数等于 data.frame 中的行数
  • 数据框是否反应?

标签: r shiny


【解决方案1】:

这是您想要完成的简化版本

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)

【讨论】:

  • 我无法让它运行。当我尝试时,我不断得到参数的长度为零。
  • 它现在可以工作了。我想知道您是如何为要生成的单个按钮生成函数(i)的,是否可以添加第二个,从而为每一行制作一对按钮?
  • 我刚刚更改了代码,为每一行创建了两个按钮。我建议您查看 do.calllapply 的文档以进一步自定义该方法。
  • 当我渲染 UI 时,我没有看到任何按钮生成。我错过了什么吗?
  • 我漏掉了一个逗号。再试一次。
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2022-01-15
  • 2020-05-27
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多