R shiny:如何在server.r中创建一个列表,其元素是由数字n索引的字符串?

时间:2014-03-05 18:57:02

标签: r shiny

我需要在我的server.r代码中使用这一类代码(基本上在服务器中我会在列表中安排ui.r的所有输入):

x<- list(input$field1,input$field2,input$field3, etc... until n=100)
x<- x[!= is.null(x)]
h4(x) 

代码在renderUI({})中使用。当我手动编写它时,它工作正常。但肯定有一种方法可以使用cat and paste(或其他函数)来更简洁地编写它。

使用以下内容不起作用,我不明白为什么:

x <- cat(paste("input$field", 1:100,",", sep = ""))
list(x)

任何帮助/建议都将受到高度赞赏

ps:我需要这个,因为我的输入是根据一个按钮生成的,所以可能是没有创建具有较大Id的字段,例如field99,我需要测试哪些字段已经创建。

干杯

1 个答案:

答案 0 :(得分:6)

要将所有输入变量作为列表,请尝试:

x <- reactiveValuesToList(input)

,或者

x <- lapply(1:3, function(z) input[[paste0("field", z)]])

简单演示:将三个用户提供的无功输入作为列表汇总

server.R 已编辑以使用第二种方法)

library(shiny)

shinyServer(function(input, output) { 
  output$restable <- renderTable({
    mylist <- lapply(1:3, function(z) input[[paste0("slide", z)]])
    data.frame(Names=c("Slider 1", "Slider 2", "Slider 3", "Sum"),
               Values=c(do.call("c", mylist), do.call("sum", mylist)))
#Values=c(do.call("c", reactiveValuesToList(input)), do.call("sum", reactiveValuesToList(input))))
  })
})

<强> ui.R

library(shiny)

# Define UI for application
shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Sliders should sum to 100!"),

  # Sidebar with 3 slider inputs
  sidebarPanel(
   sliderInput("slide1", "Slider 1: ", min = 0, max = 100, value=40, step=1),
   sliderInput("slide2", "Slider 2: ", min = 0, max = 100, value = 30, step=1),
   sliderInput("slide3", "Slider 3: ", min = 0, max = 100, value = 30, step=1)
  ),

  # Create table output
  mainPanel(
    tableOutput("restable")
  )
))