R语言如何记住满足条件的元素索引?向量赋值疑问
关于R中向量条件赋值的索引逻辑解析
嘿,这个问题问到点子上了!咱们来一步步搞清楚R在这里到底是怎么工作的~
首先先还原你的代码和实际输出:
# 你的代码 x <- c(1, 1, 3, 2, 3, 5) x[x < 3] <- x[x < 3] * 100 x
实际输出:
[1] 100 100 3 200 3 5
你的预期偏差原因
你原本以为会得到[1] 100 100 200,其实是混淆了**“提取满足条件的元素”和“在原向量中修改满足条件的元素”**这两个操作:前者只返回筛选后的子集,后者是在原向量的对应位置上做修改,其他元素保持不变,所以最终输出的是完整的修改后向量。
R如何识别并记住元素的索引位置?
这里的核心是R的逻辑索引机制,咱们拆成两步看:
- 先看
x < 3这个条件:它会生成一个和原向量长度完全一致的逻辑向量,每个位置对应原向量元素是否满足条件:
这个向量里的x < 3 # 输出:[TRUE TRUE FALSE TRUE FALSE FALSE]TRUE就标记了原向量中索引为1、2、4的元素(也就是1、1、2)满足条件。 - 当你执行
x[x < 3] <- x[x < 3] * 100时,R会:- 先通过这个逻辑向量定位到原向量中所有
TRUE对应的索引位置; - 计算这些位置上的元素乘以100后的结果(也就是100、100、200);
- 把这些结果放回原向量的对应索引位置,其他位置的元素(3、3、5)则完全保留。
- 先通过这个逻辑向量定位到原向量中所有
如果想得到你预期的输出怎么办?
要是你只想获取修改后的满足条件的元素,不需要修改原向量,那直接执行提取计算即可:
x <- c(1, 1, 3, 2, 3, 5) x[x < 3] * 100 # 输出:[1] 100 100 200
内容的提问来源于stack exchange,提问作者Joep van der Plas
相关产品推荐
相关产品推荐

