File: query.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 (60 lines) | stat: -rw-r--r-- 1,754 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
queryOne <- function(x,
                pattern,
                fuzzy=TRUE,
                perl=TRUE,
                fixed=TRUE,
                ignore.case=TRUE,
                insertions=0.999999999,
                deletions=0,
                substitutions=0
                ){
    max.distance <- list(insertions=insertions,deletions=deletions,substitutions=substitutions)
    found <- if(fuzzy)
                agrep(pattern,x,
                  ignore.case=ignore.case,
                  max.distance=max.distance)
             else
                suppressWarnings(grep(pattern,x,
                  perl=perl,
                  fixed=fixed,
                  ignore.case=ignore.case))
    if(length(found)) x else NULL
}

queryList <- function(x,
                pattern,
                fuzzy=TRUE,
                perl=TRUE,
                fixed=TRUE,
                ignore.case=TRUE,
                insertions=0.999999999,
                deletions=0,
                substitutions=0
                ){
   res <- lapply(x,query,
    pattern=pattern,
    fuzzy=fuzzy,
    perl=perl,
    fixed=fixed,
    ignore.case=ignore.case,
    insertions=insertions,
    deletions=deletions,
    substitutions=substitutions
   )
   res <- res[sapply(res,length)>0]
   if(length(res)) res else NULL
}


setMethod("query","data.set",function(x,pattern,...)queryList(x,pattern,...))
setMethod("query","importer",function(x,pattern,...)queryList(x,pattern,...))

setMethod("query","item",function(x,pattern,...){
  annot <- queryOne(annotation(x),pattern,...)
  labs <- queryOne(labels(x),pattern,...)
  if(length(annot) && length(labs)) list(annotation=annot, labels=labs)
  else if (length(annot)) annot
  else if (length(labs)) labs
  else NULL
})