1

I am attempting to make a shiny app for my dissertation. In my dissertation I have a number of variables (16) that I am analyzing across 5 conditions.

In my app I wish to have a side panel with a list of variables and conditions as radiobuttons.

In my main panel I want the following output:

  • Plotmeans graph with the mean by condition (I've got this part)
  • A summary for the selected variable and the selected condition
  • A density plot for the selected variable and the selected condition
  • Output from shapiro.test for selected variable and selected condition
  • Interpretation of the shapiro.test (i.e., normal/not normal)

I am able to easily get the plot with the means by condition, however I am having problems getting the rest of the output to display. There has to be something wrong with the way I reference my radiobuttons for the condition because after I click "Analyze" I keep getting an error telling me that the variable I selected is not found.

Please take a look at my code as I would appreciate any help:

#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)

If you need the dataset please contact me and I will send it to you. Thanks in advance!

After running:

dplot(head(dt, 20))

In my output I got:

    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"))
Aaron England
  • 1,223
  • 1
  • 14
  • 26
  • Welcome to Stack Overflow! We will be able to help you much more efficiently if we have a [reproducible example](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa). For instance, can you provide the output of `dput(dt)` in your question? – mlegge May 02 '18 at 17:41
  • A small sample of your data would help, but some questions: are variables stored as rows and conditions as columns? Your subsetting to create `new_data` suggests that conditions are columns, but then you try to subset again for the density plot using what looks like variables as columns. The error sounds like a product of `get()`, which I'm not sure you need to use anyway. My advice would be to 1) ensure you're subsetting in the right directions, and 2) try getting rid of `get()`. – phalteman May 02 '18 at 18:34
  • @phalteman in my dataset I have a column for each variable and condition is also a column. Condition is numbered 1-5. – Aaron England May 02 '18 at 18:50
  • @mlegge sorry I did not notice your comment yesterday for some reason. After running: – Aaron England May 03 '18 at 17:59
  • @AaronEngland please update the information in your question -- not the comments – mlegge May 03 '18 at 18:00
  • @mlegge I have put the info into the question. Thank you – Aaron England May 03 '18 at 18:10

1 Answers1

2

Your app shows you don't have a firm grasp on the basics of Shiny and should go through the tutorials (again, if you already have).

  • Don't define reactives or render*s in observers, use eventReactives to wait for events (like clicking a button), req to wait for variables and conditions
  • When you define a reactive it is a function, not a data object so you must call it with parentheses
  • Load one-time data sets in the global.R or app.R outside of the server function

Here is a working app:

library("shiny")
library("readr")
library("gplots")

# Data Input --------------------------------------------------------------


dt <-
  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")
  )

#import data
# 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"))


# UI --------------------------------------------------------------

# 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))),

    # 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"))
  )
)


# Server --------------------------------------------------------------

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

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

  variableData <- reactive({
    var_dat <- subsetData()[[input$var]]

    # make sure there is actually something to plot
    shiny::validate(
      need(length(var_dat) >= 3, "Not enough data (need at least 3 points) found for that condition and variable combination!")
    )

    var_dat
  })

  variableShapiro <- reactive({
    # return the object as a reactive
    shapiro.test(variableData())
  })

  #Create plot
  output$mean_plot <- renderPlot({
    input$goButton

    #using gplots plotmeans
    # use 'isolate' here to prevent the plot from changing when the input 'var'
    # changes, only want to change when button is clicked
    plot_formula <- as.formula(paste(isolate(input$var), "CONDITIONf", sep = "~"))
    plotmeans(
        formula     = plot_formula
      , data        = dt
      , connect     = FALSE
      , n.label     = FALSE
      , mean.labels = TRUE
      , digits      = 2
      , xlab        = "Condition"
      , ylab        = "Mean"
      , main        = "Variable Means by Condition"
      , pch         = " "
    )
  })

  output$dens_plot <- renderPlot({
    #Create density plot
    hist(variableData())
  })

  #Run shapiro wilk test
  output$shap <- renderPrint({
    variableShapiro()
  })

  output$norm <- renderPrint({
    ifelse(variableShapiro()$p.value < 0.05
           , "Reject the Null Hypothesis: Evidence found that the distribution is not Normal"
           , "Failed to Reject the Null Hypothesis: No evidence found that the distribution is not Normal")
  })

}

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

enter image description here

mlegge
  • 6,763
  • 3
  • 40
  • 67
  • 1
    that was extremely helpful. Yes, I am new to shiny, but I appreciate you taking your time to help. The app working beautifully and is published here [link] https://aaronrengland24.shinyapps.io/Study3_Means/ – Aaron England May 03 '18 at 23:47