如何观察在 R Shiny 中批量创建的单个输入元素
How to observe individual input elements which were created in bulk in R Shiny
我有一组 sliderInput
,其数量等于我数据中的列数。列数由 global.R
中 choices
的值决定。每个滑块都与一列相关联,并且创建如下 server.R
和 ui.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)
}
以防有人遇到同样的问题,这是我的解决方案。
如果您有更好的答案,请随时更新它。
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, ]
}
}
我有一组 sliderInput
,其数量等于我数据中的列数。列数由 global.R
中 choices
的值决定。每个滑块都与一列相关联,并且创建如下 server.R
和 ui.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)
}
以防有人遇到同样的问题,这是我的解决方案。 如果您有更好的答案,请随时更新它。
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, ]
}
}