我要做的是创建一个任意数量的操作按钮,每个操作按钮都有自己的事件基于他们自己的个人价值。
我们想说我们要创建一些按钮。我们所做的是绘制1到100之间的随机数,并将其称为 n 。然后我们创建 n 按钮,每个按钮的值在 1 和 n 之间(每个数字覆盖一次)。然后,当我们按下其中一个按钮时,我们会渲染一条文本消息,即我们按下的数字。
要设置按钮,我们有:
ui.R
shinyUI(fluidPage(
actionButton('roll','roll'),
uiOutput('buttons')
))
Server.R
shinyServer(function(input, output) {
n <- eventReactive(input$roll, {
num <- sample(1:100,1)
sample(1:num, num, replace=FALSE)
})
output$buttons <- renderUI({
lapply(1:length(n()), function(i) {
actionButton(as.character(n()[i]), as.character(n()[i]) )
})
})
})
这会生成按钮。但是,我正在努力寻找创建所有必要eventReactive()
的方法。我尝试在循环内和eventReactive()
调用中调用lapply
。但是,为了生成该循环或lapply
,您需要length(n())
的值,该值只能在另一个被动或观察命令中调用。
鉴于从上面的脚本生成的按钮,我们如何为每个按钮创建一个反应式表达式,然后输出与按下的数字相对应的文本?
答案 0 :(得分:0)
您可以搜索输入,查找已触发的按钮。单击一个按钮后,其值大于0,因此所有拾取的值都将以这种方式打印(不确定是否需要)?
library(shiny)
shinyApp(
shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
actionButton('roll','roll'),
uiOutput('buttons')
),
mainPanel(
textOutput('stuff')
)
)
)),
shinyServer(function(input, output) {
n <- eventReactive(input$roll, {
num <- sample(1:100,1)
sample(1:num, num, replace=FALSE)
})
output$buttons <- renderUI({
lapply(1:length(n()), function(i) {
actionButton(as.character(n()[i]), as.character(n()[i]) )
})
})
output$stuff <- renderText({
val <- which(lapply(paste(n()), function(i) input[[i]]) == TRUE)
if (length(val))
sprintf("Picked %s!", paste(n())[val])
})
})
)