如何编写一个 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 或具有 dim
ensions 的 '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的建议肯定更好
我正在尝试学习如何使用 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 或具有 dim
ensions 的 '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的建议肯定更好