File: methods-PROVEANDb.class.R

package info (click to toggle)
r-bioc-variantannotation 1.10.5-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,172 kB
  • ctags: 109
  • sloc: ansic: 1,088; sh: 4; makefile: 2
file content (104 lines) | stat: -rw-r--r-- 3,066 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
### ========================================================================
### PROVEANDb methods 
### =========================================================================

setMethod("keys", "PROVEANDb",
    function(x, keytype, ...)
    {
        if (missing(keytype))
            keytype <- "DBSNPID"
        sql <- paste("SELECT DISTINCT ", keytype, " FROM proveandata ", sep="") 
        dbGetQuery(x$conn, sql)[,1]
    }
) 

setMethod("columns", "PROVEANDb",
    function(x)
        DBI:::dbListFields(x$conn, "proveandata") 
) 

setMethod("keytypes", "PROVEANDb",
    function(x) "DBSNPID"
) 

setMethod("select", "PROVEANDb",
    function(x, keys, columns, keytype, ...)
    {
        if (missing(keytype)) keytype <- "DBSNPID"
        sql <- .createPROVEANDbQuery(x, keys, columns, keytype)
        if (length(sql)) {
            raw <- dbGetQuery(x$conn, sql)
            .formatPROVEANDbSelect(raw, keys, columns, keytype)
        } else {
            data.frame()
        }
    }
)

.createPROVEANDbQuery <- function(x, keys, columns, keytype)
{
    if (missing(keys) && missing(columns)) {
        sql <- "SELECT * FROM proveandata"
    }
    if (!missing(keys)) {
        if(.missingKeys(x, keys, "PROVEAN"))
            return(character())
        if (!missing(columns)) {
            if (.missingCols(x, columns, "PROVEAN"))
                return(character())
            columns <- union(keytype, columns)
            fmtcols <- paste(columns, collapse=",")
            fmtkeys <- .sqlIn(keys)
            sql <- paste("SELECT ", fmtcols, " FROM proveandata WHERE ",
                         keytype, " IN (", fmtkeys, ")", sep="")
        } else {
            fmtkeys <- .sqlIn(keys)
            sql <- paste("SELECT * FROM proveandata WHERE ", keytype,
                         " IN (", fmtkeys, ")", sep="")
        }
    } else {
        if (.missingCols(x, columns, db="PROVEAN"))
            return(character())
        columns <- union(keytype, columns)
        fmtcols <- paste(columns, collapse=",")
        sql <- paste("SELECT ", fmtcols, " FROM proveandata", sep="")
    }
    sql
}

.formatPROVEANDbSelect <- function(raw, keys, columns, keytype)
{
    ## no data
    if (!nrow(raw))
        return(data.frame())

    ## remove duplicate rows
    if (any(dup <- duplicated(raw)))
        raw <- raw[!dup, ]

    ## reorder columns 
    if (!missing(columns)) {
      if (!keytype %in% columns) columns <- c(keytype, columns)
          raw <- raw[,colnames(raw) %in% columns] 
    }

    ## return keys not found 
    index <- unique(raw[[keytype]])
    missing <- rep(FALSE, length(index))
    if (!missing(keys)) { 
        missing <- (!keys %in% as.character(index))
        lst <- as.list(rep(NA_character_, length(keys)))
        for (i in which(missing == FALSE))
            lst[[i]] <- raw[raw[[keytype]] %in% keys[i], ]
        df <- do.call(rbind, lst)
        df[[keytype]][is.na(df[[keytype]])] <- keys[missing]
        rownames(df) <- NULL
        df
    } else {
        rownames(raw) <- NULL
        raw
    } 
}