R:动态操作按钮行
我希望在Shiny中有一组两个操作按钮,其中inputID和重复数基于data.frame中的行数。下面是我的思维过程,目前运行不正常。我希望“n”组按钮等于data.frame中的行数,而不是在按下按钮时添加按钮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
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时,我没有看到生成任何按钮。我遗漏了什么吗?我遗漏了一个逗号。再试一次。