r - 将 checkboxInput 添加到 RShiny
问题描述
我对使用 RShiny 真的很陌生,我正在努力添加一个复选框。我被赋予的任务有几个阶段,但我目前停留在这一步。我目前的目标是创建一个 webapp,它显示一个箱线图,其中 x 轴(分类)和 y 轴(数值)变量依赖于 selectInput。到目前为止,我已经完成了这项工作,但现在我需要添加一个复选框,以便在单击它时,箱线图按分类级别分成单独的图。我已经尝试了一些代码变体,但我并没有真正到达任何地方,我想出的最好的方法如下:
library(shiny)
library(palmerpenguins)
library(dplyr)
library(ggplot2)
data <- penguins[,-2]
colnames(data) <- c("Species",
"Bill Length (mm)",
"Bill Depth (mm)",
"Flipper Length (mm)",
"Body Mass (g)",
"Sex",
"Year")
data.numeric <- data[, c(2:5, 7)]
data.categorical <- data[, c(1,6)]
ui <- fluidPage(
headerPanel("Penguin boxplots"),
selectInput("ycol",
"Numeric Variable",
names(data.numeric),
selected = names(data.numeric)[3]),
selectInput("xcol",
"Categorical Variable",
names(data.categorical),
selected = names(data.categorical)[2]),
checkboxInput("split",
"Split Levels",
value = FALSE),
mainPanel(
plotOutput("plot1")
))
server <- function(input, output){
reactive({ if (input$split){
output$plot1 <- renderPlot({
selectedData <- reactive({
data[, c(input$xcol, input$ycol)]
})
plot(selectedData())
})
} else {
output$plot1 <- renderPlot({
par(mar = c(20, 4.1, 0, 1))
selectedData <- reactive({
data[, c(input$xcol, input$ycol)]
})
plot(selectedData())
})
}
})
}
shinyApp(ui = ui, server = server)
正如您将看到的,这里的代码并不是为了实际拆分图表,它只是为了让我能够测试代码,直到我可以让 if 和 else 语句正常工作 - 然后我将分面图适当地。所以真的,我的问题是让 if 和 else 语句起作用。
任何帮助将非常感激!谢谢各位
解决方案
你可以试试这样的server
。
我建议避免在其他表达式中嵌套output
和表达式,并复制.reactive
reactive
output$plot1
相反,您可以简化并在您的内部包含 if/elserenderPlot
以根据复选框显示不同的可视化。我添加了一些内容来演示使用不同复选框状态进行绘图的差异。
当然,附加reactive
表达式可能会有所帮助,具体取决于您可能希望在应用程序中包含的其他内容。
编辑:将 plot 替换为ggplot
geom_boxplot
and uses facet_wrap
。
server <- function(input, output){
output$plot1 <- renderPlot({
selectedData <- data[, c(input$xcol, input$ycol)]
if (input$split) {
ggplot(data = selectedData, aes(y = .data[[input$ycol]])) +
geom_boxplot() +
facet_wrap(~.data[[input$xcol]])
} else {
ggplot(data = selectedData, aes(x = .data[[input$xcol]], y = .data[[input$ycol]])) +
geom_boxplot()
}
})
}
推荐阅读
- notifications - 如何解决某些设备未发送 Expo 推送通知的问题
- python - 烧瓶没有给我错误
- r - 具有多个 Id 和变量的 dcast
- javascript - 双击另一个元素时如何按ID号删除元素?
- sql - 在 Redshift 中解析 JSON 6 级深度
- webdriver-io - 如何使用黄瓜 js 和 webdriver io 自动执行诱惑报告?
- javascript - 一些动作后的语音到文本识别
- python - 坚持将整数转换为罗马数字
- javascript - 将道具从父母传递给孩子并在React中使用地图循环?
- tsql - 如何动态添加 where 子句的一部分?