在R中引用具有相同前缀的变量

时间:2018-09-19 02:52:22

标签: r shiny

我正在寻找一种在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上下文中,是否有办法更雄辩地在一行中定义服务器部分的输出变量?

1 个答案:

答案 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)