如何编写apply()函数将矩阵列元素限制在最大允许值范围内
问题排查
你的现有代码存在两个核心问题:
- 你提取
test[,1]得到的是一维向量,apply()要求输入为数组/矩阵这类二维结构,无法对一维向量正常执行按列(MARGIN=2)的遍历逻辑 - 单分支判断的写法可以简化,用
min()函数直接做值截断更简洁
正确实现(基于apply())
如果你需要严格使用apply()函数完成需求,可以按行遍历整个矩阵,修改每行第一列的元素后再转置回原始结构:
# 初始化测试矩阵 test <- matrix(c(1,2,3,4,5,6), ncol = 2) # MARGIN=1 表示按行遍历矩阵,执行自定义处理逻辑 test1 <- t(apply(test, MARGIN = 1, FUN = function(row_item) { row_item[1] <- min(row_item[1], 2) return(row_item) }))
结果验证
输出test1可以看到完全符合你的预期:
[,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 2 6
补充说明
如果没有强制要求使用apply(),直接对第一列做向量化操作效率更高,写法也更简单:
test[,1][test[,1] > 2] <- 2
内容的提问来源于stack exchange,提问作者Curious Jorge - user9788072
相关产品推荐
相关产品推荐

