File: value-label-duplicates.R

package info (click to toggle)
r-cran-memisc 0.99.31.8.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,136 kB
  • sloc: ansic: 5,117; makefile: 2
file content (89 lines) | stat: -rw-r--r-- 2,551 bytes parent folder | download
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
any_dup <- function(x) length(x) && any(duplicated(x@.Data))

which_dup_lab <- function(x){
    ii <- duplicated(x@.Data)
    dup_lab <- unique(x@.Data[ii])
    structure(lapply(dup_lab,get_labs,labels=x@.Data,value=x@values),
              names=dup_lab)
}

get_labs <- function(which,labels,values){
    i <- labels == which
    values[i]
}
 
duplicated_labels <- function(x) UseMethod("duplicated_labels")

duplicated_labels.item <- function(x){
    l <- labels(x)
    ii <- duplicated(l@.Data)
    if(any(ii)){
        dup_lab <- unique(l@.Data[ii])
        structure(lapply(dup_lab,
                         get_labs,
                         labels=l@.Data,
                         value=l@values),
                  names=dup_lab,
                  class="dupLabelsReport1")
    }
    else NULL
}

print.dupLabelsReport1 <- function(x,...){
    n <- paste0(names(x),":")
    l <- sapply(x,paste,collapse=", ")
    r <- cbind(format(n),format(l))
    r <- apply(r,1,paste,collapse=" ")
    writeLines(r)
}

duplicated_labels.item.list <- function(x){
    ll <- lapply(as.list(x),labels)
    ii <- sapply(ll,any_dup)
    ll <- ll[ii]
    d <- description(x)
    d <- d[ii]
    if(length(ll))
        structure(lapply(ll,which_dup_lab),
                  description=d,
                  class="dupLabelsReport")
    else NULL
}

print.dupLabelsReport <- function(x,...){
    width <- getOption("width",80)
    toprule <- paste(rep("=",width),collapse="")
    midrule <- paste(rep("-",width),collapse="")
    n <- names(x)
    d <- attr(x,"description")
    for(i in seq_along(x)){
        cat("\n",toprule,sep="")
        cat("\n ",n[i],": ",sQuote(d[i]),sep="")
        cat("\n",midrule,"\n",sep="")
        x.i <- x[[i]]
        l.i <- sapply(x.i,paste,collapse=", ")
        w <- width - max(nchar(l.i)) - 5
        n.i <- names(x.i)
        cutit <- nchar(n.i) > w
        n.i[cutit] <- paste0(substr(n.i[cutit],start=1,stop=w-3),"...")
        n.i <- paste0(n.i,":")
        r.i <- cbind(" ",format(n.i),format(l.i))
        r.i <- apply(r.i,1,paste,collapse=" ")
        writeLines(r.i)
    }
}

warn_if_duplicate_labels <- function(variables){
    ll <- lapply(variables,labels)
    ii <- sapply(ll,any_dup)
    if(any(ii)){
        n <- names(variables)[ii]
        nn <- paste(n,collapse=", ")
        nn <- strwrap(nn,prefix="  ")
        nn <- paste(nn,collapse="\n")
        warning(sprintf("%d variables have duplicated labels:\n%s",
                        length(n),
                        nn),
             call.=FALSE)
    }
}