我的数据是一个列数可变的矩阵。此外,矩阵内的值范围也是可变的。
我想构建一个可变数量的sliderInput
,每个都对应于矩阵中的一列。
每个滑块的上限应对应于矩阵中的maxRange
。
有任何建议如何一次性完成吗?
lapply(1:ncol, function(i) {
sliderInput(
paste0('a', i),
paste0('SelectA', i),
min = min(c(1:maxRange)),
max = max(c(1:maxRange)),
value = c(1, maxRange),
step =1
)
}
)
答案 0 :(得分:1)
当我想创建一组与数据集派生的值相对应的输入元素(min,max选项列表等)时,我遇到了类似的问题。从广义上讲,我会通过global.R
获取所有必需的数据,然后引用元素中的概念,以便在滑块中获取min/max
:
<强> global.R 强>
# Get dates for the slider
## Delete pointless month
dta.nom$DATE_NAME <- sub("February ", replacement = "", x = dta.nom$DATE_NAME)
## Convert to number and get min/max
dta.nom$DATE_NAME <- as.numeric(x = dta.nom$DATE_NAME)
yr.min <- min(dta.nom$DATE_NAME)
yr.max <- max(dta.nom$DATE_NAME)
然后在滑块
中<强> ui.R 强>
# Select the dates for the data
sliderInput("sliderYears", label = h5("Years"), min = yr.min,
max = yr.max, value = c(2000, 2010), sep = "",
step = 1, animate = FALSE),
完整代码位于GitHub。我不确定我是否理解正确,但如果您有兴趣在Shiny中动态连接界面元素,那么您可以使用updateSelectInput。使用global
代码并引用界面元素中的值时,可以解决与引用数据有关的任何其他问题。
答案 1 :(得分:1)
如果有人遇到同样的问题,这是我的解决方案:
....
sidebarPanel(
selectInput(
inputId = "dataName",
label = "Select your data",
choices = c("data1", "data2", "data3", "data4")
),
uiOutput(outputId = "sliders")
),
.....
.....
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)
})
})
........
selectRange
是global.R
中的另一个功能:
selectRange <- function(x){
if(x == "data1"){choices = c(1:100)}
if(x == "data2"){choices = c(1:50)}
if(x == "data3"){choices = c(1:75)}
if(x == "data4"){choices = c(1:150)}
return(choices)
}