-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfile2.R
92 lines (66 loc) · 2.08 KB
/
file2.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
make_LD <- function(x){
structure(x, class = "LongitudinalData")
}
# a generic function for extracting subject-specific information
subject <- function(x, i) UseMethod("subject")
subject.LongitudinalData <- function(x, i) {
index <- which(x$id %in% i)
x <- lapply(x, function(x) x[index])
structure(x, class = "LongitudinalData")
}
# a generic function for extracting visit-specific information
visit <- function(i, j) UseMethod("visit")
visit.LongitudinalData <- function(x, j) {
index <- which(x$visit %in% j)
x <- lapply(x, function(x) x[index])
structure(x, class = "LongitudinalData")
}
# a generic function for extracting room-specific information
room <- function(i, j) UseMethod("room")
room.LongitudinalData <- function(x, k) {
index <- which(x$room == k)
x <- lapply(x, function(x) x[index])
structure(x, class = "LongitudinalData")
}
print.LongitudinalData <- function(x, ...) {
if(length(unique(x$id)) == 1){
cat("Subject ID: ", unique(x$id), "\n")
} else if(length(unique(x$id)) == 0) {
cat("NULL")
} else {
cat("Longitudinal dataset with", length(unique(x$id)), "subjects")
}
if(length(unique(x$visit)) == 1){
cat("Visit: ", unique(x$visit), "\n")
}
if(length(unique(x$room)) == 1){
cat("Room: ", unique(x$room))
}
invisible(x)
}
# summary function
summary.LongitudinalData <- function(object, ...) {
object <- list(
summary.id = unique(object$id),
summary.data = data.frame(
visit = object$visit,
room = object$room,
value = object$value
)
)
if(length(unique(object$summary.data$visit)) == 1 &
length(unique(object$summary.data$room)) == 1){
object$summary.data <- summary(object$summary.data$value)
} else {
object$summary.data <- object$summary.data %>%
aggregate(value ~ visit + room, FUN = mean, data = .) %>%
spread(room, value)
}
class(object) <- "summary_LongitudinalData"
object
}
print.summary_LongitudinalData <- function(x, ...) {
cat("Subject ID: ", x$summary.id, "\n")
print(x$summary.data)
invisible(x)
}