我有一个Shiny app在我的server.R中使用renderUI来创建一组滑块,因为我不知道我需要创建多少个滑块。这在网页端很好用,但我在检索设定值时遇到问题。这是我的代码中的renderUI函数:
output$sliders <- renderUI({
if (input$unequalpts == "no")
return(NULL)
updateTabsetPanel(session, "inTabSet", selected = "Unequal")
theSHP <- mySHPdata()
thestrata <- unique(as.character(theSHP$shnystr))
numstrata <- nlevels(theSHP$shnystr)
lapply(1:numstrata, function(i) {
sliderInput(inputId = paste0("strata", i), label = paste("strata ", thestrata[i]),
min = 0, max = 100, value = c(0, 100), step = 1)
})
})
以下是我尝试在服务器的后续反应函数中检索值的方法.R:
print("getting slider values...")
mysliders<- NULL
theSHP <- mySHPdata()
numstrata <- nlevels(theSHP$shnystr)
mysliders <- lapply(1:numstrata, function(i) {
input[[paste0("strata", i)]]
})
grtspts <-(mysliders)
print("input sliders are")
print(grtspts)
当我这样做时,print(grtspts)的结果如下:
Browse[2]> grtspts
[[1]]
[1] 0 25
[[2]]
[1] 0 41
[[3]]
[1] 0 22
他不是我想要的;我只想要清单[25,41,22]。我不知道为什么我没有得到一个简单的列表,而是,似乎是一个列表列表?或者..我不知道;我不明白前导零是什么,就在每个设置滑块值之前。我如何从grtspts中简单地提取25个,比如0和0 25?
答案 0 :(得分:2)
当您声明sliderInput
时,您指定了value = c(0, 100)
。来自sliderInput
滑块的初始值。长度为1的数字向量将创建一个常规滑块;长度为2的数字向量将创建一个双端范围滑块。如果值不在最小值和最大值之间,则会发出警告
您创建了一个双端范围滑块,因此返回两个值。要获得第二个值,您可以使用
input[[paste0("strata", i)]][2]