-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathProjectPart2.R
97 lines (93 loc) · 2.81 KB
/
ProjectPart2.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
setClass("room",
slots=list(ID="numeric",
Visit="numeric",
Room="character",
values = "data.frame"))
setClass("visit",
slots=list(id="numeric",
visit="numeric",
room="list"))
setClass("subject",
slots=list(id="numeric",
visit = "list"))
setClass("LongitudinalData",
slots = list(subjects = "list"))
setGeneric("make_LD", function(x){
standardGeneric("make_LD")
})
setGeneric("subject", function(x,y){
standardGeneric("subject")
})
setGeneric("visit", function(x,y){
standardGeneric("visit")
})
setGeneric("room", function(x,y){
standardGeneric("room")
})
setMethod("make_LD",
c(x = "tbl_df"),
function(x){
newsubject=list()
for(i in unique(x$id)){
newvisitlist=list()
for(j in unique(x[x$id==i,]$visit)){
newroom=list()
for(k in unique(x[x$id==i & x$visit==j,]$room)){
newvalues=x[x$id==i & x$visit==j & x$room==k,4:5]
newroom[[k]]=new("room",ID=i,Visit=j,Room=k,values=newvalues)
}
newvisitlist[[j+1]]=new("visit",id=i,visit=j,room=newroom)
}
newsubject[[i]]=new("subject",id=i,visit=newvisitlist)
}
new("LongitudinalData",subjects=newsubject)
})
setMethod(f="subject",
signature=c(x="LongitudinalData",y="numeric"),
definition=function(x,y){
x@subjects[[y]]
})
setMethod("visit",
c(x = "subject",y="numeric"),
function(x,y){
x@visit[[y+1]]
})
setMethod("room",
c(x = "visit",y="character"),
function(x,y){
x@room[[y]]
})
setGeneric("print")
setMethod("print",
c(x = "LongitudinalData"),
function(x){
paste("Longitudinal data with", length(x@subjects)-sum(sapply(x@subjects,is.null)), "subjects")
})
setMethod("print",
c(x = "subject"),
function(x){
paste("Subject ID: ", x@id)
})
setMethod("print",
c(x = "room"),
function(x){
cat(paste("ID:", x@ID), paste("Visit:", x@Visit), paste("Room:",x@Room),sep='\n')
})
setGeneric("summary")
setMethod('summary',
"subject",
function(object,...){
outdata=data.frame(visit=numeric())
for(i in object@visit){
outdata[(i@visit+1),1]=i@visit
for(j in i@room){
outdata[(i@visit+1),j@Room]=colMeans(j@values[,1])
}
}
outdata
})
setMethod("summary",
"room",
function(object,...){
summary(object@values[,1])
})