使用动态变量对R进行子集

Sup*_*eka 2 r subset dataframe

我有以下示例代码.我有一个有16行的数据帧ts.当我用实际数字进行子集时,它工作正常但是当我用计算数字进行子集时,为什么我的代码表现得很奇怪?

有人可以解释一下这有什么不对吗?

情况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
Run Code Online (Sandbox Code Playgroud)

案例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
Run Code Online (Sandbox Code Playgroud)

Spa*_*man 5

R并不关心你的空间表达方式.根据严格的优先方案评估事物.括号中的内容首先完成.所以:

> 1: b+b
[1] 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

因为加法的优先级低于":".首先1:b评估,然后b添加.所以你得到:

> (1:b)+b
[1] 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

如果你想要替代方案,可以括起来:

> 1:(b+b)
[1] 1 2 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

(1+b):b如果那是你想要的,我建议你也加以括号- 括号没有区别,但是对于忘记优先规则的人来说,它们有助于提高可读性.