R语言如何引用函数返回的向量作为其他函数的输入参数
问题错误点说明
你的代码运行失败有3个核心问题:
b存储的是目标列的索引值(单值10),不是第10列的整列数据,直接写b < 25只会判断数字10和25的大小关系,完全没有读取目标列的所有行值- 判断条件里的
"25"是字符串格式,数值和字符串做比较会触发隐式类型转换,逻辑判断结果不可靠 - 代码里操作的对象是
df,但你初始化的矩阵对象名为ar,对象名不匹配会直接触发对象不存在的报错
正确实现方案
先复现你的测试数据和前置列筛选逻辑:
# 初始化测试矩阵 ar <- structure(c(0, 11, 17, 15, 22, 67, 73, 68, 31, 31, 28, 33, 34, 32, 11, 0, 9, 12, 21, 67, 73, 67, 35, 30, 34, 67, 60, 36, 17, 9, 0, 6, 19, 70, 74, 68, 36, 36, 36, 64, 66, 39, 15, 12, 6, 0, 13, 64, 69, 66, 34, 37, 39, 77, 65, 45, 22, 21, 19, 13, 0, 59, 60, 66, 38, 39, 39, 40, 43, 43, 67, 67, 70, 64, 59, 0, 10, 18, 77, 75, 78, 93, 93, 85, 73, 73, 74, 69, 60, 10, 0, 15, 76, 74, 80, 103, 101, 95, 68, 67, 68, 66, 66, 18, 15, 0, 59, 65, 73, 90, 87, 82, 31, 35, 36, 34, 38, 77, 76, 59, 0, 8, 19, 24, 28, 32, 31, 30, 36, 37, 39, 75, 74, 65, 8, 0, 12, 20, 22, 23, 28, 34, 36, 39, 39, 78, 80, 73, 19, 12, 0, 6, 14, 18, 33, 67, 64, 77, 40, 93, 103, 90, 24, 20, 6, 0, 2, 8, 34, 60, 66, 65, 43, 93, 101, 87, 28, 22, 14, 2, 0, 6, 32, 36, 39, 45, 43, 85, 95, 82, 32, 23, 18, 8, 6, 0), .Dim = c(14L, 14L)) # 统计每列小于25的元素数量,找到对应列索引 a <- colSums(ar < 25) b <- which.max(a) # 运行结果为10,对应第10列
行筛选可以用两种写法,都能实现「排除第10列中数值小于25的对应行」的需求:
- 写法1:直接用R原生矩阵索引,逻辑最清晰,不容易出环境变量相关的报错
# 行维度保留第b列值>=25的记录,列维度全部保留 result <- ar[ar[, b] >= 25, ]
- 写法2:用
subset函数实现,注意明确指定取矩阵的第b列做判断
result <- subset(ar, ar[, b] >= 25)
结果校验
运行以下代码可以确认筛选结果符合要求:
# 输出筛选后结果中对应原第b列的所有值,确认没有小于25的记录 print(result[, b])
内容的提问来源于stack exchange,提问作者Juan Almeira
相关产品推荐
相关产品推荐

