# psum: Sum, Product, Mean and more In kit: Data Manipulation Functions Implemented in C

## 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

 ```1 2 3 4 5 6``` ``` 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.

Morgan Jacob

## Examples

 ``` 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``` ```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 ```

kit documentation built on March 9, 2021, 5:12 p.m.