Home > Back-end >  How to write an apply() function to limit each element in a matrix column to a maximum allowable val
How to write an apply() function to limit each element in a matrix column to a maximum allowable val

Time:11-13

I'm trying to learn how to use the apply() functions.

Suppose we have a 3 row, 2 column matrix of test <- matrix(c(1,2,3,4,5,6), ncol = 2), and we would like the maximum value of each element in the first column (1, 2, 3) to not exceed 2 for example, so we end up with a matrix of (1,2,2,4,5,6).

How would one write an apply() function to do this?

Here's my latest attempt: test1 <- apply(test[,1], 2, function(x) {if(x > 2){return(x = 2)} else {return(x)}})

CodePudding user response:

We may use pmin on the first column with value 2 as the second argument, so that it does elementwise checking with the recycled 2 and gets the minimum for each value from the first column

test[,1] <- pmin(test[,1], 2)

-output

> test
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    2    6

Note that apply needs the 'X' as an array/matrix or one with dimensions, when we subset only a single column/row, it drops the dimensions because drop = TRUE by default

CodePudding user response:

If you really want to use the apply() function, I guess you're looking for something like this:

t(apply(test, 1, function(x) c(min(x[1], 2), x[2])))
##       [,1] [,2]
##  [1,]    1    4
##  [2,]    2    5
##  [3,]    2    6

But if you want my opinion, akrun's suggestion is definitely better.

  • Related