我正试图创建一个闪亮的应用程序,我是相当新的游戏闪亮。我已经弄清楚了用户界面,我读了大量的威克姆的“掌握闪亮”。然而,我还没有找到任何解决方案或好的资源来处理Shiny中的if else语句。
该应用程序从用户处获取输入:
1.年龄组
1.生理性别
1.峰值摄氧量
基于该输入,应用程序应该标准化峰值O2结果,并向用户返回距他/她的年龄组的平均值有多少SD。
我被困在这了。任何关于如何完成此代码的帮助将不胜感激。
验证码如下:
# Load packages
library(shiny)
library(tidyverse)
# Vo2 max reference values for men
men_20_29_yrs <- 54
men_30_39_yrs <- 49
men_40_49_yrs <- 47
men_50_59_yrs <- 42
men_60_69_yrs <- 39
men_above_70_yrs <- 34
# SD's for each age group segment for men
men_20_29_yrs_sd <- 8.8
men_30_39_yrs_sd <- 7.9
men_40_49_yrs_sd <- 8.0
men_50_59_yrs_sd <- 7.6
men_60_69_yrs_sd <- 6.9
men_above_70_yrs_sd <- 7.1
# Vo2 max reference values for women
wmn_20_29_yrs <- 43
wmn_30_39_yrs <- 40
wmn_40_49_yrs <- 38
wmn_50_59_yrs <- 34
wmn_60_69_yrs <- 31
wmn_above_70_yrs <- 27
# SD's for each age group segment for women
wmn_20_29_yrs_sd <- 7.6
wmn_30_39_yrs_sd <- 7.0
wmn_40_49_yrs_sd <- 7.0
wmn_50_59_yrs_sd <- 5.7
wmn_60_69_yrs_sd <- 5.1
wmn_above_70_yrs_sd <- 5.1
# UI
ui <- fluidPage(
tabPanel("Maksimalt oksygenopptak"),
# App title
titlePanel("Hvor bra er ditt maksimale oksygenopptak?"),
# Sidebar layout
sidebarLayout(
sidebarPanel(
# Age group segments
radioButtons(
inputId = "age_group",
label = p("Hvilken aldersgruppe hører du til?"),
choices = c("20-29 år", "30-39 år", "40-49 år", "50-59 år",
"60-69 år", "Over 70 år")
),
# Biological sex
radioButtons(
inputId = "sex",
label = "Hva er ditt biologiske kjønn?",
choices = c("Mann", "Kvinne")
),
# V02 max slider
sliderInput(
inputId = "v02max",
label = "Hva er ditt maksimale oksygenopptak?",
min = 0,
max = 100,
value = 50),
actionButton(
inputId = "calculate",
label = "Vis meg resultatet mitt",
class = "btn-lg btn-success"
)
),
# Web page functionality explanation
mainPanel(
p("Denne nettsiden tar inn informasjon om din alder, ditt kjønn og ditt
maksimale oksygenopptak. Med den informasjonen får du svar på hvor
godt ditt maksimale oksygenopptak er i forhold til referanseverdier for
din alder og ditt kjønn."
),
p("Før inn din", strong("alder,"), "ditt", strong("kjønn"), "og ditt",
strong("maksimale oksygenopptak"), "så vil du få resultatene
dine."),
p("Referanseverdier er fra Loe et al., 2014:", a("https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0113884")
),
plotOutput("plot"),
verbatimTextOutput("results")
)
)
)
# Server logic
server <- function(input, output) {
dataInput <- reactive({
# If else statements
if (input$sex == "Mann") {
if (input$age_group == "20-29 år") {
v02 <- men_20_29_yrs
sd <- men_20_29_yrs_sd
} else if (input$age_group == "30-39 år") {
v02 <- men_30_39_yrs
sd <- men_30_39_yrs_sd
} else if (input$age_group == "40-49 år") {
v02 <- men_40_49_yrs
sd <- men_40_49_yrs_sd
} else if (input$age_group == "50-59 år") {
v02 <- men_50_59_yrs
sd <- men_50_59_yrs_sd
} else if (input$age_group == "60-69 år") {
v02 <- men_60_69_yrs
sd <- men_60_69_yrs_sd
} else if (input$age_group == "Over 70 år") {
v02 <- men_above_70_yrs
sd <- men_above_70_yrs_sd
}
} else if (input$sex == "Kvinne") {
if (input$age_group == "20-29 år") {
v02 <- wmn_20_29_yrs
sd <- wmn_20_29_yrs_sd
} else if (input$age_group == "30-39 år") {
v02 <- wmn_30_39_yrs
sd <- wmn_30_39_yrs_sd
} else if (input$age_group == "40-49 år") {
v02 <- wmn_40_49_yrs
sd <- wmn_40_49_yrs_sd
} else if (input$age_group == "50-59 år") {
v02 <- wmn_50_59_yrs
sd <- wmn_50_59_yrs_sd
} else if (input$age_group == "60-69 år") {
v02 <- wmn_60_69_yrs
sd <- wmn_60_69_yrs_sd
} else if (input$age_group == "40-49 år") {
v02 <- wmn_above_70_yrs
sd <- wmn_above_yrs_sd
}
}
})
}
# Run the application
shinyApp(ui = ui, server = server)
1条答案
按热度按时间f0brbegy1#
好吧,在编程中,只要它能工作,就没有“错误”的方法。然而,我认为你用这种方法阻碍了自己。首先,我将数据放入
data.frame
:然后,您可以通过应用中的输入轻松过滤此数据框:
剩下要做的就是计算结果并打印结果:
这是整个App的样子。请注意,我将sex输入中的选项更改为命名向量。
choices = c("Mann" = "men", "Kvinne" = "wmn")