我正在寻找一种在R中引用具有相同前缀的变量的方法。具体地说,我正在寻找在此R Shiny应用程序的服务器部分中的一行中定义输出变量。在应用程序的完整版中,我有很多行的滑块输入,因此手动输入每一行都太麻烦了。通过使用paste0
创建输入/输出变量,我已经解决了ui部分的问题。
library(shiny)
v1 <- lapply(1:2, function(i){
fluidRow(column(1,sliderInput(inputId = paste0("B",i),
label = NULL,value = 0,min=0,max = 100, step=5)))
})
v2 <- lapply(1:2,function(i){
fluidRow(column(1, textOutput(paste0("A",i))))
})
v3 <- c(rbind(v1,v2))
ui <- fluidPage(fluidRow(v3))
server <- function(input, output) {
output$A1 <- renderText({input$B1})
output$A2 <- renderText({input$B2})
}
shinyApp(ui = ui, server=server)
我尝试实施this post的建议。即:
z <- sapply(1:2, function(x) assign(paste0("A",x), renderText({input$B[x]}), pos=1))
server <- function(input, output) {
z
}
但是,这没有用。在这种Shiny上下文中,是否有办法更雄辩地在一行中定义服务器部分的输出变量?
答案 0 :(得分:1)
最简单的方法是使用双括号[[]]
调用小部件。
以下代码应该可以正常工作。
library(shiny)
number_of_ui <- 5
v1 <- lapply(1:number_of_ui, function(i){
fluidRow(column(1,sliderInput(inputId = paste0("B",i),
label = NULL,value = 0,min=0,max = 100, step=5)))
})
v2 <- lapply(1:number_of_ui,function(i){
fluidRow(column(1, textOutput(paste0("A",i))))
})
v3 <- c(rbind(v1,v2))
ui <- fluidPage(fluidRow(v3))
server <- function(input, output) {
create_server<-function(i){
output[[paste0("A",i)]]<-renderText({
input[[paste0("B",i)]]
})
}
lapply(1:number_of_ui, create_server)
}
shinyApp(ui = ui, server=server)