咨询R语言中y[i:j - k]类方括号索引的解析逻辑
R向量混合索引解析规则答疑
测试数据:y <- c(1, 2, 3, 5, 7, 8)
所有问题的核心都是R语言的运算符优先级::(序列运算符)的优先级高于+、-这类算术运算符,索引运算会先解析优先级高的部分,再处理其他运算。
问题1:y[1-1:4]返回[5 7 8]的原因
- 先执行优先级更高的
1:4,得到向量c(1,2,3,4) - 再执行减法运算
1 - c(1,2,3,4),得到结果c(0,-1,-2,-3) - R向量索引规则:
- 索引为
0会被直接忽略 - 负号索引表示移除对应位置的元素
所以实际生效的索引是-1,-2,-3,即移除第1、2、3个元素,剩下的就是5,7,8
- 索引为
问题2:y[1-4]返回[1 2 5 7 8]的逻辑
这里没有:运算符,直接执行算术运算1-4=-3,等同于y[-3],即移除第3个元素,结果就是1,2,5,7,8。和问题1的差异在于是否包含高优先级的:,两者逻辑完全一致,只是运算顺序不同。
问题3:y[1:1+2-1]返回[2]的解析逻辑
- 先执行优先级更高的
1:1,得到单一值1 - 再执行后续算术运算
1+2-1=2 - 最终索引为
2,对应向量y的第2个元素2
而写成y[i:(i + j - k)]时,括号改变了运算优先级:先计算括号内的i+j-k,再执行:生成序列索引,所以能得到预期的区间结果。
内容的提问来源于stack exchange,提问作者amccnnll
相关产品推荐
相关产品推荐

