R: Sum, Product, Mean and more

psum/pprod/pmean/pall/pany {kit} | R Documentation

## Sum, Product, Mean and more

### Description

Similar to `pmin` and `pmax` but for sum, product and mean. Only works for integer, double and complex types. These functions do not recycle vectors. `pany` and `pall` are derived from base functions `all` and `any`. Note that `pmean` only works with integer and double types.

### Usage

      psum(..., na.rm=FALSE)
      pprod(..., na.rm=FALSE)
      pall(..., na.rm=FALSE)
      pany(..., na.rm=FALSE)
      pmean(..., na.rm=FALSE)
      pcount(..., value)

### Arguments

`...` | Numeric arguments of type integer, double complex. Logical vector for `pall` and `pany`. Functions `pall`, `pany`,`pmean`,`pprod` and `psum` also accept a single `data.frame` made of the previous types. See example 7 below.
`na.rm` | A logical indicating whether missing values should be removed. Default value is `FALSE`.
`value` | A non `NULL` value of length 1. `pcount` will count how many times it occurs.

### Value

Return the sum, product or mean of all numeric arguments. The value returned will be of the type of the highest argument types (integer < double < complex). For `pall` and `pany`, a logical vector is returned. Functions `psum`, `pprod` and `pmean` will result in error if used with factors.

### Author(s)

Morgan Jacob

### Examples

    x = c(1, 3, NA, 5)
    y = c(2, NA, 4, 1)
    z = c(3, 4, 4, 1)

    # Example 1: psum
    psum(x, y, z, na.rm = FALSE)
    psum(x, y, z, na.rm = TRUE)

    # Example 2: pprod
    pprod(x, y, z, na.rm = FALSE)
    pprod(x, y, z, na.rm = TRUE)

    # Example 3: pmean
    pmean(x, y, z, na.rm = FALSE)
    pmean(x, y, z, na.rm = TRUE)

    # Adjust x, y, and z to use in pall and pany
    x = c(TRUE, FALSE, NA, FALSE)
    y = c(TRUE, NA, TRUE, TRUE)
    z = c(TRUE, TRUE, FALSE, NA)

    # Example 4: pall
    pall(x, y, z, na.rm = FALSE)
    pall(x, y, z, na.rm = TRUE)

    # Example 5: pany
    pany(x, y, z, na.rm = FALSE)
    pany(x, y, z, na.rm = TRUE)

    # Example 6: pcount
    pcount(x, y, z, value = TRUE)

    # Example 7: data.frameas an input
    pprod(iris[,1:2])
    psum(iris[,1:2])

    # Benchmarks
    # ----------
    # n = 1e8L
    # x = rnorm(n) # 763 Mb
    # y = rnorm(n)
    # z = rnorm(n)
    #
    # microbenchmark::microbenchmark(
    #   kit=psum(x, y, z, na.rm = TRUE),
    #   base=rowSums(do.call(cbind,list(x, y, z)), na.rm=TRUE),
    #   times = 5L, unit = "s"
    # )
    # Unit: Second
    # expr  min   lq mean median   uq  max neval
    # kit  0.52 0.52 0.65   0.55 0.83 0.84     5
    # base 2.16 2.27 2.34   2.35 2.43 2.49     5
    #
    # x = sample(c(TRUE, FALSE, NA), n, TRUE) # 382 Mb
    # y = sample(c(TRUE, FALSE, NA), n, TRUE)
    # z = sample(c(TRUE, FALSE, NA), n, TRUE)
    #
    # microbenchmark::microbenchmark(
    #   kit=pany(x, y, z, na.rm = TRUE),
    #   base=sapply(1:n, function(i) any(x[i],y[i],z[i],na.rm=TRUE)),
    #   times = 5L
    # )
    # Unit: Second
    # expr    min     lq   mean   median     uq    max neval
    # kit    1.07   1.09   1.15     1.10   1.23   1.23     5
    # base 111.31 112.02 112.78   112.97 113.55 114.03     5

[Package kit version 0.0.10 Index]