将单选按钮链接到闪亮的

时间:2018-05-02 17:14:43

标签: r shiny radio-button shiny-reactivity

我正试图为我的论文制作一个闪亮的应用程序。在我的论文中,我有许多变量(16),我正在分析5个条件。

在我的应用程序中,我希望有一个侧面板,其中包含变量和条件列表作为radiobuttons。

在我的主面板中,我想要以下输出:

  • Plotmeans图表,带有平均条件(我已经得到了这部分)
  • 所选变量和所选条件的摘要
  • 所选变量和所选条件的密度图
  • 从shapiro.test输出所选变量和所选条件
  • 解释shapiro.test(即正常/不正常)

我能够轻松地通过条件获得绘图,但是我无法显示输出的其余部分。我引用我的无线电按钮的方式有问题,因为我点击"分析"我一直收到一个错误,告诉我找不到我选择的变量。

请查看我的代码,我将不胜感激:

#Shiny app to display means, summary, and normality interpretation for each 
variable and condition in study 3

library(shiny)

#############################################################################

# Define UI 
ui <- fluidPage(

  # Application title
  titlePanel(
    h1("Variable Means by Condition (Study 3)", align = "center", style = 
"color:black")),

# Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel(
      radioButtons(inputId = "var", label = "Select a Variable:",
                   c("Time from Catch to Lowest COM" = "T0_1",
                     "Time from Lowest COM to Release" = "T1_2",
                     "Release Time" = "T0_2",
                     "Knee Extension at Catch" = "T0_Knee_Ext",
                     "Hip Extension at Catch" = "T0_Hip_Ext",
                     "Minimum Ball Height" = "Min_Ball_Ht",
                     "Ball Height at Lowest COM" = "T1_Ball_Ht",
                     "Knee Extension at Lowest COM" = "T1_Knee_Ext",
                     "Hip Extension at Lowest COM" = "T1_Hip_Ext",
                     "Shoulder Flexion at Release" = "T2_Sh_Flex",
                     "Elbow Extension at Release" = "T2_Elb_Ext",
                     "Release Height" = "T2_Rel_Ht",
                     "Jump Height" = "T2_Jump_Ht",
                     "Wrist Extension at Follow-Through" = "T2_Wr_Ext",
                     "Accuracy" = "ACCURACY",
                     "Overall Performance" = "Acc.Spd")),

  #Add radio buttons to choose a condition
  radioButtons(inputId = "cond", label = "Select a Condition:",
               c("Condition 1" = 1,
                 "Condition 2" = 2,
                 "Condition 3" = 3,
                 "Condition 4" = 4,
                 "Condition 5" = 5)),

  #Add action button      
  actionButton("goButton","Analyze")),

# Show a plot of the mean of the selected variable
    mainPanel(
      #create a plot for selected variable
      plotOutput("mean_plot"),

      #Get summary for selected variable and selected condition
      verbatimTextOutput("summ"),

      #Get density plot for selected variable and selected condition
      plotOutput("dens_plot"),

      #Calculate shapiro wilk test for selected variable and selected 
condition
      verbatimTextOutput("shap"),

      #Return if the selected variable and selected condition is normal or 
not
      verbatimTextOutput("norm"))
    )
  )


####################################################################

# Define server logic required to draw plotmeans
server <- function(input, output) {

  #import data
  library(readr)
  dt <- read_csv("dt.csv")
  dt$CONDITIONf <- factor(dt$CONDITION, levels = c(1,2,3,4,5), labels = 
c("Normal","None","Wrist","Elb. Ht.","Rim"))


  #subset data on various inputs from ui
  subsetData <- reactive({
    new_data <- dt[,CONDITION == input$cond]
    return(new_data)
  })


  #After clicking goButton....
  observeEvent(input$goButton, {

    #Create plot
    output$mean_plot <- renderPlot({
    #using gplots plotmeans
    library(gplots)
    p <- plotmeans(get(input$var) ~ CONDITIONf, data = dt, connect = FALSE, 
n.label = FALSE,
                 mean.labels = TRUE, digits = 2, xlab = "Condition", ylab = 
"Mean", main =
                   "Variable Means by Condition", pch = " ")})




    #Get summary for selected variable and condition


    #Create density plot
    output$dens_plot <- renderPlot({
    hist(subsetData[,get(input$var)])
    })

    #Run shapiro wilk test
    output$shap <- renderPrint({
      shapiro.test(subsetData[,get(input$var)])
    })

    #Print interpretation of shapiro.test (ifelse(p-value from shapiro.test < 
0.05, "Not Normal", "Normal")
    output$norm <- renderPrint({
      ifelse(output$shap < 0.05, return("Not Normal", return("Normal")))
    })


  })
}


#############################################################################
# Run the application 
shinyApp(ui = ui, server = server)

如果您需要数据集,请与我联系,我会将其发送给您。提前谢谢!

跑完后:

dplot(head(dt, 20))

在我的输出中,我得到了:

    structure(list(X1 = 1:20, PRIM_KEY = 1:20, NAME = c("Andrew Grajeda", 
    "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda", 
    "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda", 
    "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda", 
    "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda", 
    "Andrew Grajeda", "Andrew Grajeda", "Andrew Grajeda"), SUBJECT = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L), BIRTHDAY = structure(c(11860, 11860, 11860, 11860, 
    11860, 11860, 11860, 11860, 11860, 11860, 11860, 11860, 11860, 
    11860, 11860, 11860, 11860, 11860, 11860, 11860), class = "Date"), 
        TODAY_DATE = structure(c(17616, 17616, 17616, 17616, 17616, 
        17616, 17616, 17616, 17616, 17616, 17616, 17616, 17616, 17616, 
        17616, 17616, 17616, 17616, 17616, 17616), class = "Date"), 
        AGE = c(15.7698630136986, 15.7698630136986, 15.7698630136986, 
        15.7698630136986, 15.7698630136986, 15.7698630136986, 
    15.7698630136986, 
        15.7698630136986, 15.7698630136986, 15.7698630136986, 
    15.7698630136986, 
        15.7698630136986, 15.7698630136986, 15.7698630136986, 
    15.7698630136986, 
        15.7698630136986, 15.7698630136986, 15.7698630136986, 
    15.7698630136986, 
        15.7698630136986), YOE = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
        2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), DAILY_SHOTS = c(50L, 
        50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
        50L, 50L, 50L, 50L, 50L, 50L, 50L), CLIP = c("00_1", "00_1", 
        "00_1", "00_1", "00_1", "00_1", "00_1", "00_1", "00_1", "00_1", 
        "00_1", "00_1", "00_1", "00_1", "00_1", "00_1", "00_1", "00_1", 
        "00_1", "00_1"), HEIGHT = c(1.73, 1.73, 1.73, 1.73, 1.73, 
        1.73, 1.73, 1.73, 1.73, 1.73, 1.73, 1.73, 1.73, 1.73, 1.73, 
        1.73, 1.73, 1.73, 1.73, 1.73), Group = c(1L, 1L, 1L, 1L, 
        1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
        1L), CONDITION = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
        2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), SHOT = c(1L, 2L, 
        3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 
        7L, 8L, 9L, 10L), ACCURACY = c(4.5, 4.5, 4, 4.5, 4, 4.5, 
        4.5, 4, 3.5, 4.5, 3, 2, 2, 2, 3, 4.5, 4.5, 2, 3, 3), Make = c(1L, 
        1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 
        1L, 0L, 0L, 0L), T0 = structure(c(-2209075175, -2209075170, 
        -2209075164, -2209075158, -2209075153, -2209075149, -2209075143, 
        -2209075136, -2209075130, -2209075126, -2209075040, -2209075035, 
        -2209075030, -2209075025, -2209075020, -2209075015, -2209075010, 
        -2209075006, -2209075001, -2209074998), class = c("POSIXct", 
        "POSIXt"), tzone = "UTC"), T0_Knee_Ext = c(169.7, 165.7, 
        169.3, 173, 171.3, 168.7, 164.1, 165.7, 166.8, 165.7, 164, 
        157.4, 157.4, 157.4, 147.2, 147.2, 150, 149.9, 152, 149), 
        T0_Hip_Ext = c(172.6, 172.6, 172.6, 176.7, 171.7, 171.7, 
        161.1, 161.1, 168.9, 171.7, 163.7, 160.9, 160.9, 160.9, 154.5, 
        156.2, 156.2, 156.2, 156.5, 156.2), Min_Ball_Ht = c(0.93, 
        0.94, 0.96, 0.92, 0.95, 0.94, 0.94, 0.93, 0.94, 0.93, 0.8, 
        0.81, 0.8, 0.8, 0.81, 0.81, 0.8, 0.8, 0.81, 0.8), T1 = 
    structure(c(-2209075175, 
        -2209075169, -2209075163, -2209075157, -2209075152, -2209075148, 
        -2209075143, -2209075135, -2209075129, -2209075125, -2209075039, 
        -2209075034, -2209075029, -2209075025, -2209075020, -2209075015, 
        -2209075010, -2209075005, -2209075001, -2209074997), class = 
    c("POSIXct", 
        "POSIXt"), tzone = "UTC"), T0_1 = c(0.601, 0.534, 0.601, 
        0.567, 0.601, 0.601, 0.584, 0.6, 0.567, 0.6, 0.422, 0.372, 
        0.339, 0.355, 0.288, 0.272, 0.339, 0.289, 0.222, 0.289), 
        T1_Ball_Ht = c(1.04, 1.03, 1.02, 1.03, 1.04, 1.05, 1.04, 
        1.03, 1.03, 1.04, 0.97, 0.94, 0.95, 0.96, 0.97, 0.96, 0.95, 
        0.94, 0.95, 0.96), T1_Knee_Ext = c(116.3, 119.6, 122.9, 119.2, 
        127.4, 126.9, 134.4, 129, 134.5, 134.4, 112.3, 116.4, 122.3, 
        119.7, 121.6, 121.6, 117.7, 117.7, 117.7, 117.7), T1_Hip_Ext = c(142, 
        138.4, 138.4, 138.4, 142.9, 147.9, 147.9, 147.9, 147.9, 147.9, 
        133.5, 133.5, 141.5, 148.2, 145.4, 145.4, 145.4, 145.4, 145.4, 
        145.4), T2 = structure(c(-2209075174, -2209075169, -2209075163, 
        -2209075157, -2209075152, -2209075148, -2209075142, -2209075135, 
        -2209075129, -2209075125, -2209075039, -2209075034, -2209075029, 
        -2209075025, -2209075020, -2209075014, -2209075010, -2209075005, 
        -2209075001, -2209074997), class = c("POSIXct", "POSIXt"), tzone = 
    "UTC"), 
        T1_2 = c(0.267, 0.3, 0.3, 0.267, 0.266, 0.283, 0.267, 0.267, 
        0.3, 0.3, 0.267, 0.267, 0.283, 0.217, 0.267, 0.333, 0.284, 
        0.267, 0.334, 0.267), T0_2 = c(0.868, 0.834, 0.901, 0.834, 
        0.867, 0.884, 0.851, 0.867, 0.867, 0.9, 0.689, 0.639, 0.622, 
        0.572, 0.555, 0.605, 0.623, 0.556, 0.556, 0.556), T2_Sh_Flex = 
    c(137.3, 
        140.8, 134.2, 138.6, 138, 138.6, 138.6, 134.2, 134.2, 140.8, 
        138, 138, 136, 136, 136, 137, 137, 136, 136, 136), T2_Elb_Ext = 
    c(179.8, 
        179.8, 179, 179, 178.5, 179.4, 179.2, 179, 178.9, 179.8, 
        174.9, 174.9, 174.9, 174.9, 174.9, 175, 174.8, 174.9, 175, 
        174.8), T2_Rel_Ht = c(2.17, 2.18, 2.17, 2.18, 2.17, 2.17, 
        2.18, 2.17, 2.18, 2.17, 2.17, 2.17, 2.18, 2.17, 2.17, 2.18, 
        2.17, 2.18, 2.18, 2.17), T2_Jump_Ht = c(0.05, 0.06, 0.05, 
        0.06, 0.05, 0.05, 0.06, 0.05, 0.06, 0.05, 0.05, 0.05, 0.06, 
        0.05, 0.05, 0.06, 0.05, 0.06, 0.06, 0.05), T2_Wr_Ext = c(109.3, 
        106.8, 106.8, 106.8, 107.9, 109.1, 106.8, 107.8, 107, 107.5, 
        120, 113.5, 107.9, 100.5, 100.5, 100.5, 100.5, 100.5, 100.5, 
        100.5), CONDITIONf = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
        1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = 
    c("Normal", 
        "None", "Wrist", "Elb. Ht.", "Rim"), class = "factor"), Makef = 
    c("Make", 
        "Make", "Miss", "Make", "Miss", "Make", "Make", "Miss", "Make", 
        "Make", "Miss", "Miss", "Miss", "Miss", "Miss", "Make", "Make", 
        "Miss", "Miss", "Miss"), ACCURACYf = c("Inside Rim - Make", 
        "Inside Rim - Make", "Inside Rim - Miss", "Inside Rim - Make", 
        "Inside Rim - Miss", "Inside Rim - Make", "Inside Rim - Make", 
        "Inside Rim - Miss", "Top Rim - Make", "Inside Rim - Make", 
        "Top Rim - Miss", "Outside Rim", "Outside Rim", "Outside Rim", 
        "Top Rim - Miss", "Inside Rim - Make", "Inside Rim - Make", 
        "Outside Rim", "Top Rim - Miss", "Top Rim - Miss"), ACCURACYnorm = 
    c(0.875, 
        0.875, 0.75, 0.875, 0.75, 0.875, 0.875, 0.75, 0.625, 0.875, 
        0.5, 0.25, 0.25, 0.25, 0.5, 0.875, 0.875, 0.25, 0.5, 0.5), 
        T0_2norm = c(0.317038102084831, 0.292595255212078, 0.340762041696621, 
        0.292595255212078, 0.316319194823868, 0.328540618260244, 
        0.304816678648454, 0.316319194823868, 0.316319194823868, 
        0.340043134435658, 0.188353702372394, 0.152408339324227, 
        0.14018691588785, 0.104241552839684, 0.092020129403307, 
    0.127965492451474, 
        0.140905823148814, 0.0927390366642703, 0.0927390366642703, 
        0.0927390366642703), T0_2norm.inv = c(0.682961897915169, 
        0.707404744787922, 0.659237958303379, 0.707404744787922, 
        0.683680805176132, 0.671459381739756, 0.695183321351546, 
        0.683680805176132, 0.683680805176132, 0.659956865564342, 
        0.811646297627606, 0.847591660675773, 0.85981308411215, 
    0.895758447160316, 
        0.907979870596693, 0.872034507548526, 0.859094176851186, 
        0.90726096333573, 0.90726096333573, 0.90726096333573), Acc.Spd = 
    c(1.55796189791517, 
        1.58240474478792, 1.40923795830338, 1.58240474478792, 
    1.43368080517613, 
        1.54645938173976, 1.57018332135155, 1.43368080517613, 
    1.30868080517613, 
        1.53495686556434, 1.31164629762761, 1.09759166067577, 
    1.10981308411215, 
        1.14575844716032, 1.40797987059669, 1.74703450754853, 
    1.73409417685119, 
        1.15726096333573, 1.40726096333573, 1.40726096333573)), .Names = 
    c("X1", 
    "PRIM_KEY", "NAME", "SUBJECT", "BIRTHDAY", "TODAY_DATE", "AGE", 
    "YOE", "DAILY_SHOTS", "CLIP", "HEIGHT", "Group", "CONDITION", 
    "SHOT", "ACCURACY", "Make", "T0", "T0_Knee_Ext", "T0_Hip_Ext", 
    "Min_Ball_Ht", "T1", "T0_1", "T1_Ball_Ht", "T1_Knee_Ext", "T1_Hip_Ext", 
    "T2", "T1_2", "T0_2", "T2_Sh_Flex", "T2_Elb_Ext", "T2_Rel_Ht", 
    "T2_Jump_Ht", "T2_Wr_Ext", "CONDITIONf", "Makef", "ACCURACYf", 
    "ACCURACYnorm", "T0_2norm", "T0_2norm.inv", "Acc.Spd"), row.names = c(NA, 
    -20L), class = c("tbl_df", "tbl", "data.frame"))

1 个答案:

答案 0 :(得分:0)

你的应用程序显示你没有牢牢掌握Shiny的基础知识,应该通过tutorials(再次,如果你已经有)。

  • 请勿在{{1​​}}中定义reactiverender*,使用observer等待事件(例如点按按钮),{{1} }等待变量和条件
  • 定义eventReactive时,它是一个函数,而不是数据对象,因此必须用括号调用它
  • 在服务器功能外的reqreactive中加载一次性数据集

这是一个有用的应用程序:

global.R

enter image description here