我正在构建一个Shiny应用程序,其中包含用于映射/可视化来自特定数据集的数据的各种选项。我有一个selectInput
,用户从他们想要显示的数据集中选择变量。
我希望在用户仅选择数字变量时显示conditionalPanel
。
我确定它很简单,但我在编写conditionalPanel
的条件参数时遇到了麻烦,因为我不熟悉Javascript。在R语言中,我可以使用is.numeric()
,但我不熟悉如何在Javascript中执行此操作。我已经尝试了condition = "isNaN(input.variables) == FALSE"
,但我认为这只是测试变量的名称是否为数字,而不是其中的数据。
我知道我可以根据this tutorial使用服务器端的反应式表达式在R中编写一个条件,但是我宁愿避免它,因为它的计算量更大密集的。
非常感谢任何帮助!
以下示例代码。要清楚,单选按钮应仅在" nums"变量被选中(包含数字数据)但不是当"字母"变量被选中。
letters <- c("a","b","c")
nums <- 1:3
dat <- data.frame(letters,nums)
ui <- fluidPage(
sidebarPanel(
selectInput("variables", h4("Pick variable to plot:"), choices = colnames(dat)),
conditionalPanel(
condition = "isNaN(input.variables) == FALSE",
radioButtons("seq_div", "Colours should be...", c("sequential", "divergent"))
)
),
mainPanel()
)
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
如果您事先并不知道哪些列是数字的(我认为这是这种情况),您可以这样做:
letters <- c("a","b","c")
nums <- 1:3
num2 <- 4:6
dat <- data.frame(letters,nums, num2)
numeric_cols = paste("'",colnames(dat)[sapply(dat, is.numeric)],"'", collapse = ',', sep = '')
ui <- fluidPage(
sidebarPanel(
selectInput("variables", h4("Pick variable to plot:"), choices = colnames(dat)),
conditionalPanel(
condition = paste0("[", numeric_cols, "].indexOf(input.variables) >= 0"),
radioButtons("seq_div", "Colours should be...", c("sequential", "divergent"))
)
),
mainPanel()
)
server <- shinyServer(function(input, output) {
})
shinyApp(ui = ui, server = server)
它基本上找到哪些列是数字,将它们粘贴到JS数组表单中,然后检查所选项是否在该数组中。