Search code examples
rmaxmin

How can I take pairwise parallel maximum or minimum between two vectors?


Suppose I have two vectors in R, defined as follows.

a = c(3,3,5)
b = c(2,4,6)

Is there a function that will give me the pairwise maximum between the elements of a and the elements of b, which can be run inside a formula?

I tried to do, max(a, b) but it does not get the desired output.

Desired Output:

C(3,4,6)

Actual output:

6

Solution

  • Pairwise maximum, pmax(a, b), will give c(3,4,6).

    a <- c(3,3,5,NA,1)
    b <- c(2,4,6,0,NA)
    
    pmax(a, b)
    # [1]  3  4  6 NA NA
    
    pmax(a, b, na.rm = TRUE)
    # [1] 3 4 6 0 1
    

    There is also a pairwise minimum

    pmin(a, b)
    # [1]  2  3  5 NA NA
    
    pmin(a, b, na.rm = TRUE)
    # [1] 2 3 5 0 1
    

    And a pairwise sum, which I pulled from this question/answer has been very useful to me at times:

    psum(a, b) # == a + b
    # [1]  5  7 11 NA NA
    
    psum(a, b, na.rm = TRUE)
    # [1]  5  7 11  0  1
    
    psum(c(-1, NA, 4), c(0, NA, NA))
    # [1] -1 NA NA
    
    psum(c(-1, NA, 4), c(0, NA, NA), na.rm = TRUE)
    # [1] -1 NA  4
    
    psum <- function(..., na.rm = FALSE) {
      dat <- do.call(cbind, list(...))
      res <- rowSums(dat, na.rm = na.rm) 
      idx_na <- !rowSums(!is.na(dat))
      res[idx_na] <- NA
      res 
    }