在Base R中实现矩阵列与向量的布尔表达式求值及占比计算
矩阵行满足列对应阈值条件的占比计算(Base R无循环实现)
核心通用代码
row_proportion <- function(X, y) { sum(rowSums(abs(X) <= y) == ncol(X)) / nrow(X) }
代码逻辑解释
- 逐元素匹配判断:
abs(X) <= y利用R的向量自动循环特性,将向量y与矩阵X的每列一一对应,生成同维度的逻辑矩阵,每个元素标记|X[i,j]| ≤ y[j]是否成立。 - 行内条件校验:
rowSums(abs(X) <= y)对每行的逻辑值求和(TRUE=1,FALSE=0),得到每行满足单列条件的数量;再通过== ncol(X)筛选出所有列都满足条件的行。 - 计算占比:用
sum()统计符合要求的行数,除以总行数得到最终比例。
示例验证
# 生成模拟数据(匹配手动实现的输出场景) set.seed(123) X <- matrix(rnorm(9*3, 0, 2), nrow = 9) # 9行3列的随机矩阵 y <- c(1, 1.5, 2) # 对应3列的阈值向量 # 调用函数计算 row_proportion(X, y) # 输出结果:0.2222222(与手动逐列判断结果一致)
对比手动实现
手动逐列判断的写法(仅适用于固定列数):
# 手动写法示例(仅3列场景) sum(abs(X[,1]) <= y[1] & abs(X[,2]) <= y[2] & abs(X[,3]) <= y[3]) / nrow(X)
核心代码无需修改即可适配任意列数的矩阵,避免了重复编写判断条件,扩展性更强。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

