如何编写一个 apply() 函数来将矩阵列中的每个元素限制为最大允许值?

How to write an apply() function to limit each element in a matrix column to a maximum allowable value?

我正在尝试学习如何使用 apply() 功能。

假设我们有一个3行2列的矩阵test <- matrix(c(1,2,3,4,5,6), ncol = 2),我们希望第一列(1,2,3)中每个元素的最大值不超过2,例如,所以我们最终得到一个矩阵 (1,2,2,4,5,6).

如何编写 apply() 函数来执行此操作?

这是我最近的尝试:test1 <- apply(test[,1], 2, function(x) {if(x > 2){return(x = 2)} else {return(x)}})

我们可以在第一列上使用 pmin 并将值 2 作为第二个参数,以便它对回收的 2 进行元素检查,并从第一列中获取每个值的最小值

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

-输出

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

请注意,apply 需要 'X' 作为 array/matrix 或具有 dimensions 的 'X',当我们仅对单个 column/row 进行子集化时,它会下降尺寸因为 drop = TRUE 默认

如果你真的想使用 apply() 功能,我猜你正在寻找这样的东西:

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

不过如果你要征求我的意见,akrun的建议肯定更好