-
Notifications
You must be signed in to change notification settings - Fork 1
/
server.r
128 lines (96 loc) · 3.5 KB
/
server.r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
library(DT)
library(metricsgraphics)
shinyServer(function(input, output) {
#This function is repsonsible for loading in the selected CSV file
filedata <- reactive({
infile <- input$datafile
if (is.null(infile)) {
# User has not uploaded a file yet
return(NULL)
}
dataframe <- read.csv(infile$datapath)
return(dataframe)
})
#The following set of functions dynamically populate the column selectors
output$yvar <- renderUI({
df <-filedata()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
selectInput("yvar", "Y variable:",items)
})
output$xvar <- renderUI({
df <-filedata()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
renderText({h2("Choose variables to plot:")})
selectInput("xvar", "X variable:",items)
})
#The checkbox selector is used to determine whether we wish to color by categorical variable
output$colflag <- renderUI({
df <-filedata()
if (is.null(df)) return(NULL)
checkboxInput("colflag", "Color by", TRUE)
})
#If we do want to color by category, this is where categorical variables gets created
output$colby <- renderUI({
df <-filedata()
if (is.null(df)) return(NULL)
#Let's only show numeric columns
nums <- sapply(df, is.factor)
items=names(nums[nums])
names(items)=items
selectInput("category", "Category:",items)
})
output$getPlot <- renderUI({
df <-filedata()
if (is.null(df)) return(NULL)
#Let's only show numeric columns
actionButton("getPlot", "Plot the variables")
})
output$msg <- renderUI({
df <-filedata()
if (is.null(df)) return(NULL)
p(h3("The uploaded data is as following:"),br(),p("Note: Select variables from sidebar panel and press the Plot button at bottom to compute their summary and draw scatterplot"), br())
})
#This previews the CSV data file
output$filetable <- DT::renderDataTable(DT::datatable(filedata()))
#This function is the one that is triggered when the action button is pressed
getdata <- reactive({
if (input$getPlot == 0) return(NULL)
df=filedata()
if (is.null(df)) return(NULL)
#Get the CSV file data
dummy=filedata()
#Which from/to columns did the user select?
xv=input$xvar
yv=input$yvar
cat=input$category
xy <- as.data.frame(dummy[,c(xv,yv,cat)])
names(xy)=c("X","Y","cat")
return(xy)
})
# Generate a summary of the dataset
output$summary <- renderPrint({
dataset <- getdata()
names(dataset)<-c(input$xvar,input$yvar)
output$summary_msg <- renderUI({
df <-filedata()
if (input$getPlot == 0) return(NULL)
p(h3("Summary of ",input$xvar," and ",input$yvar),br())
})
summary(dataset)
})
output$plot_msg <- renderUI({
df <-filedata()
if (input$getPlot == 0) return(NULL)
p(h3("Scatterplot of ",input$xvar," and ",input$yvar))
})
output$plot <- renderMetricsgraphics(mjs_plot(data=getdata(), x = X, y = Y, width=400, height=300)%>%
mjs_point(least_squares=TRUE,color_accessor=cat,
x_rug=TRUE, y_rug=TRUE,
color_range=c("blue","red","green"),
color_type="category") %>%
mjs_labs(x=input$xvar, y=input$yvar) )
})