我正在使用rShiny(shiny_0.9.1)R版本3.1.0(2014-04-10)和平台:x86_64-w64-mingw32 / x64(64位)开发Web应用程序。我在我的ui文件中使用selectInput方法从数据帧中选择两列(“IND1_WATER”,“IND2_WATER”)。 以下是工作示例代码:
selectInput(inputId = "indicators",
multiple = TRUE,
label = "Select the list of indicators",
choices = list("Water stress" = "IND1_WATER",
"Water scarcity" = "IND2_WATER")
但是我想标记两个具有相同名称的列,并使用它们来渲染图表。我尝试了不同的选项,如“水压力”= c(“IND1_WATER”,“IND2_WATER”)或“水压力”= colnames(mydf)[6:7],但它们不起作用。它只取第一个值。关于如何解决这个问题的任何想法?
涓
答案 0 :(得分:2)
每个"选择"只能有一个与之关联的值。如果要为单个选择返回多个值,则必须通过连接所需的值来伪造它。例如
selectInput(inputId = "indicators",
multiple = TRUE,
label = "Select the list of indicators",
choices = list("Water stress" = "IND1_WATER,IND2_WATER")
然后在服务器端
indicators <- strsplit(input$indicators, ",")[[1]]
如果有逗号,那将会有效。
答案 1 :(得分:2)
在CRAN(>= 0.10.1
)上使用最新版本的闪亮,您可以使用新的optgroup
功能(请参阅an example here)。在你的情况下,
selectInput(inputId = "indicators",
multiple = TRUE,
label = "Select the list of indicators",
choices = list("Water stress" = c("IND1_WATER", "IND2_WATER")))
如果您尚未更新R套餐,请update.packages(ask = FALSE)
。
答案 2 :(得分:0)
这是我上一个问题的答案。为了让单个选择返回多个值,ui文件应该是这样的:
selectInput(inputId = "indicator",
label = (HTML("<b>Select a list of indicators:</b>")),
multiple = TRUE,
selected = 'Water stress',
choices = list("Water stress" = "Water stress", "Water scarcity" = "Water scarcity" ))
虽然服务器文件应该包含一些条件语句,但是为了能够选择多个列,可以选择一个特定的值:
passData <- reactive({
data <- data[data$Country %in% input$country_filter1 &
data$Year %in% input$year,]
rownames(data) = unique(data$NUTS_CODE)
if (input$indicator== 'Water stress') {col= 7:9}
if (input$indicator== 'Water scarcity') {col= 8:9}
data[,col]
})
我希望它可以帮助其他类似问题的人。感谢我的同事Javier Martinez的宝贵贡献!
答案 3 :(得分:0)
添加到这个问题
indicators <- strsplit(input$indicators, ",")[[1]]
与以下一起使用时会发出警告:“较长的对象长度不是较短对象长度的倍数”:
filter_at(., vars(col1, col2), any_vars(. == indicators))
您必须使用:
filter_at(., vars(col1, col2), any_vars(. %in% indicators))