File: NaArray-Math-methods.R

package info (click to toggle)
r-bioc-sparsearray 1.6.2%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,768 kB
  • sloc: ansic: 16,138; makefile: 2
file content (72 lines) | stat: -rw-r--r-- 2,422 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
### =========================================================================
### 'Math' and 'Math2' methods for NaArray objects
### -------------------------------------------------------------------------
###
### See '?S4groupGeneric' for which functions belong to the 'Math'
### and 'Math2' groups.
###


### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
### 'Math' group
###

### NaArray objects only support functions from the 'Math' group that
### propagate NAs.
.SUPPORTED_NAARRAY_MATH_OPS <- c(SUPPORTED_MATH_OPS,
    "log", "log10", "log2", "exp",
    "cos", "acos", "cosh", "acosh", "cospi",
    "gamma", "lgamma", "digamma", "trigamma"
)

.check_NaArray_Math_op <- function(op)
{
    if (!(op %in% .SUPPORTED_NAARRAY_MATH_OPS))
        stop(wmsg(op, "() is not supported on NaArray objects ",
                  "(result wouldn't be \"non-NA sparse\" in general)"))
}

.Math_NaSVT <- function(op, x)
{
    stopifnot(isSingleString(op), is(x, "NaArray"))
    check_svt_version(x)
    .check_NaArray_Math_op(op)
    if (type(x) != "double")
        stop(wmsg("the ", op, "() method for NaArray objects ",
                  "only supports input of type \"double\" at the moment"))
    new_NaSVT <- SparseArray.Call("C_Math_SVT",
                                  x@dim, x@type, x@NaSVT, TRUE, op, 0.0)
    BiocGenerics:::replaceSlots(x, type="double", NaSVT=new_NaSVT, check=FALSE)
}

setMethod("Math", "NaArray", function(x) .Math_NaSVT(.Generic, x))


### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
### 'Math2' group
###

.Math2_NaSVT <- function(op, x, digits)
{
    stopifnot(isSingleString(op), is(x, "NaArray"))
    check_svt_version(x)
    if (type(x) != "double")
        stop(wmsg("the ", op, "() method for NaArray objects ",
                  "only supports input of type \"double\" at the moment"))
    if (!isSingleNumber(digits))
        stop(wmsg("'digits' must be a single number"))
    if (!is.double(digits))
        digits <- as.double(digits)
    new_NaSVT <- SparseArray.Call("C_Math_SVT",
                                  x@dim, x@type, x@NaSVT, TRUE, op, digits)
    BiocGenerics:::replaceSlots(x, type="double", NaSVT=new_NaSVT, check=FALSE)
}

setMethod("round", "NaArray",
    function(x, digits=0) .Math2_NaSVT("round", x, digits)
)

setMethod("signif", "NaArray",
    function(x, digits=6) .Math2_NaSVT("signif", x, digits)
)