1 |
m |
|
grpc |
|
col.dat |
|
locfun |
|
... |
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 | ##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (m, grpc, col.dat, locfun = tmean, ...)
{
flagit = F
if (is.null(dim(m)))
stop("Data must be stored in a matrix or data frame")
if (is.na(grpc[1]))
stop("The argument grpc is not specified")
if (is.na(col.dat[1]))
stop("The argument col.dat is not specified")
if (length(grpc) > 4)
stop("grpc must have length <= 4")
m = as.data.frame(m)
if (length(grpc) == 1) {
p1 = ncol(m) + 1
dum = rep(1, nrow(m))
flagit = T
m = cbind(m, dum)
grpc = c(NULL, gprc, p1)
cat1 <- sort(unique(m[, grpc[1]]))
M = NULL
for (ig1 in 1:length(cat1)) {
flag1 = (m[, grpc[1]] == cat1[ig1])
flag = (flag1 == 1)
msub = as.data.frame(m[flag, ])
loc = locfun(m[flag, col.dat], ...)
M = rbind(M, as.data.frame(cbind(msub[1, grpc], loc)))
}
M = M[, c(1, 3)]
}
if (length(grpc) == 2) {
cat1 <- sort(unique(m[, grpc[1]]))
cat2 <- sort(unique(m[, grpc[2]]))
M = NULL
for (ig1 in 1:length(cat1)) {
for (ig2 in 1:length(cat2)) {
flag1 = (m[, grpc[1]] == cat1[ig1])
flag2 = (m[, grpc[2]] == cat2[ig2])
flag = (flag1 * flag2 == 1)
msub = m[flag, ]
loc = locfun(m[flag, col.dat], ...)
M = rbind(M, as.data.frame(cbind(msub[1, grpc],
loc)))
}
}
}
if (length(grpc) == 3) {
cat1 <- sort(unique(m[, grpc[1]]))
cat2 <- sort(unique(m[, grpc[2]]))
cat3 <- sort(unique(m[, grpc[3]]))
M = NULL
for (ig1 in 1:length(cat1)) {
for (ig2 in 1:length(cat2)) {
for (ig3 in 1:length(cat3)) {
flag1 = (m[, grpc[1]] == cat1[ig1])
flag2 = (m[, grpc[2]] == cat2[ig2])
flag3 = (m[, grpc[3]] == cat3[ig3])
flag = (flag1 * flag2 * flag3 == 1)
msub = m[flag, ]
loc = locfun(m[flag, col.dat], ...)
M = rbind(M, as.data.frame(cbind(msub[1, grpc],
loc)))
}
}
}
}
if (length(grpc) == 4) {
cat1 <- sort(unique(m[, grpc[1]]))
cat2 <- sort(unique(m[, grpc[2]]))
cat3 <- sort(unique(m[, grpc[3]]))
cat4 <- sort(unique(m[, grpc[4]]))
M = NULL
for (ig1 in 1:length(cat1)) {
for (ig2 in 1:length(cat2)) {
for (ig3 in 1:length(cat3)) {
for (ig4 in 1:length(cat4)) {
flag1 = (m[, grpc[1]] == cat1[ig1])
flag2 = (m[, grpc[2]] == cat2[ig2])
flag3 = (m[, grpc[3]] == cat3[ig3])
flag4 = (m[, grpc[4]] == cat4[ig4])
flag = (flag1 * flag2 * flag3 * flag4 ==
1)
msub = m[flag, ]
loc = locfun(m[flag, col.dat], ...)
M = rbind(M, as.data.frame(cbind(msub[1,
grpc], loc)))
}
}
}
}
}
if (flagit)
M = M[, c(1, 3)]
M
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.