我在R方面相当陌生,在R Shiny方面也很陌生,将不胜感激。
我正在尝试设计一个简单的计数器应用程序,在该应用程序中我将需要许多操作按钮。我想知道是否有可能将动作按钮的InputID组装成矩阵,以便在应用程序的“服务器”部分中创建一个循环,在其中我可以将特定的InputID称为矩阵元素。
最终目标是能够单击应用程序中的操作按钮,不仅可以在单击后将其值显示为标签,还可以将该值存储在矩阵中。我打算做几种不同的矩阵,这就是为什么我想创建一个循环来缩短代码的原因。
下面的代码是我到目前为止为展示我正在尝试的内容而做的,但是它不起作用。
a1_q1 <- 0
a1_q2 <- 0
a1_q3 <- 0
a1_q4 <- 0
a2_q1 <- 0
a2_q2 <- 0
a2_q3 <- 0
a2_q4 <- 0
v1 <- c(a1_q1,a1_q2,a1_q3,a1_q4)
v2 <- c(a2_q1,a2_q2,a2_q3,a2_q4)
ma <- rbind(v1,v2)
inputbuttons <- c("a","b","c","d","e","f","g","h")
minputbuttons <- matrix(inputbuttons,nrow = 2,ncol = 4)
ui <- fluidPage(
navbarPage("Scouting",
tabPanel("Attack",
navlistPanel(
tabPanel("A",
sidebarPanel(
tags$b("A matrix")
),
mainPanel(
tags$b("Quality: 1-4"),
br(),
actionButton(minputbuttons[1,1], a_q1,
style = "width: 100px; height:100px; background-color:blue; color:white;"),
actionButton(minputbuttons[1,2], a_q2,
style = "width: 100px; height:100px; background-color:blue; color:white;"),
actionButton(minputbuttons[1,3], a_q3,
style = "width: 100px; height:100px; background-color:blue; color:white;"),
actionButton(minputbuttons[1,4], a_q4,
style = "width: 100px; height:100px; background-color:blue; color:white;"),
br(),
actionButton(minputbuttons[2,1], a_q1,
style = "width: 100px; height:100px; background-color:blue; color:white;"),
actionButton(minputbuttons[2,2], a_q2,
style = "width: 100px; height:100px; background-color:blue; color:white;"),
actionButton(minputbuttons[2,3], a_q3,
style = "width: 100px; height:100px; background-color:blue; color:white;"),
actionButton(minputbuttons[2,4], a_q4,
style = "width: 100px; height:100px; background-color:blue; color:white;")
)
)
)
)
)
)
server <- function(input, output, session) {
for (i in 1:2){
for (j in 1:4){
observeEvent(
input$minputbuttons[i,j],
ma[i,j] <<- ma[i,j] + 1,
updateActionButton(session,minputbuttons[i,j],label = ma[i,j])
)
}
}
}
shinyApp(server = server, ui = ui)
在此先感谢您的帮助! V〜
答案 0 :(得分:0)
for循环在服务器端不适用于这种情况,您应该尝试使用lapply
library(shiny)
x <- letters
ui <- function(request){
tagList(
lapply(
x,
function(x){
actionButton(
inputId = x,
label = x
)
}
)
)
}
server <- function(
input,
output,
session
){
lapply(
x,
function(x){
observeEvent( input[[x]] , {
print(x)
})
}
)
}
shinyApp(ui, server)