This question already has answers here: Brackets make a vector different. How exactly is vector expression evaluated? (3个答案) 4年前关闭。 我有以下示例代码。我有一个数据帧ts有16行。当我使用实际数字子集时,它可以正常工作,但是当我使用计算出的数字子集时,为什么我的代码表现出怪异?谁能解释一下这是怎么回事?情况1:> a[1] 12> c[1] 16> ts$trend[13:16][1] 21.36926 21.48654 21.60383 21.72111> ts$trend[a+1:c] [1] 21.36926 21.48654 21.60383 21.72111 NA NA NA NA NA NA NA NA[13] NA NA NA NA情况2:> b[1] 4> temp[1: 8][1] 1 2 3 4 5 6 7 8> temp[1: b+b][1] 5 6 7 8 最佳答案 这是运算符优先级的情况。可以通过使用方括号来避免temp[1:(b+b)]#[1] 1 2 3 4 5 6 7 8如果我们在OP的代码中检查问题1:b#[1] 1 2 3 4(1:b) + b#[1] 5 6 7 8因此,运算符优先级在这里通过评估1:b,然后加上b发生。这在?Syntax中有很好的描述 :: :::访问命名空间中的变量 $ @组件/插槽 提取[[[索引 ^取幂(从右到左) -+一元减号和加号 :序列运算符%any%特殊运算符(包括%%和%/%) * /乘除 +-(二进制)加,减 = ==!=排序和比较 !否定 &&&和 | ||要么 〜如公式中 ->->>向右分配 =分配(从右到左) ?帮助(一元和二进制)数据temp <- 1:10b <- 4关于r - 用动态变量对R子集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38335734/