如何观察R Shiny中批量创建的单个输入元素

时间:2015-04-22 23:06:49

标签: r shiny shiny-server

我有一组sliderInput,其数量等于我数据中的列数。列数由choicesglobal.R的值确定。每个滑块都与一列相关联,并在server.Rui.R下方显示。

我想单独observe个,所以我可以将值应用到关联列。像这个例子中的东西。 有什么建议吗?

 #Example. Not valide code!!!
 selectedValBySliders <- observe({ 
    print("Numbers selected via sliders:") 
    out_sliders <- input$sliders[1:numSliders]
    print(out_sliders)
  })

server.R

    output$sliders <- renderUI({
      numSliders <- numCols(input$dataName)
      lapply(1:numSliders, function(i) {
        sliderInput(
                    inputId = paste0('column', i),
                    label = paste0('Select the range for column ', i),
                    min = min(selectRange(input$dataName)),
                    max = max(selectRange(input$dataName)),
                    value = c(min(selectRange(input$dataName)), max(selectRange(input$dataName))),
                    step =1)
        })
    })

ui.R

            uiOutput(outputId = "sliders"),

global.R

 selectRange <- function(x){
  if(x == "data1"){choices = c(1:10)}
  if(x == "data2"){choices = c(1:15)}
  if(x == "data3"){choices = c(1:20)}
  if(x == "data4"){choices = c(1:25)}
return(choices)  
}

 numCols <- function(x){
  if(x == "data1"){ncolumns = 4}
  if(x == "data2"){ncolumns = 5}
  if(x == "data3"){ncolumns = 5}
  if(x == "data4"){ncolumns = 6}
return(ncolumns)  
}

1 个答案:

答案 0 :(得分:0)

如果有人可能遇到同样的问题,这是我的解决方案。 如果你有一个更好的答案,请随意更新它。

  minMax <- matrix(0, ncol(getData), 2)
  for(i in seq(ncol(getData))){
    if(!is.null(input[[paste0('column', i)]])){
    val <- input[[paste0('column', i)]]
    minMax[i,] <- val
    index <- which(getData[, i] %in% c(minMax[i, 1]:minMax[i, 2]))
    selectedSet <- getData[index, ]
  }
}