R df[,1:3]与df[,i:i+;2]之间的差异,i=1

R df[,1:3]与df[,i:i+;2]之间的差异,i=1,r,R,我有一个数据帧df1,如下所示。当我打印(df1[,1:3])时,我得到了我期望的前3列。但是当我使用I=1时;打印(df1[,i:i+2])我只能得到第三列。有人知道原因吗 t.x t.y t.Freq prop.row.x prop.row.y prop.row.Freq prop.col.x 1 Female None 25 Female None 0.4237288 Female 2 Male None 17

我有一个数据帧
df1
,如下所示。当我
打印(df1[,1:3])
时,我得到了我期望的前3列。但是当我使用
I=1时;打印(df1[,i:i+2])
我只能得到第三列。有人知道原因吗

t.x    t.y t.Freq prop.row.x prop.row.y prop.row.Freq prop.col.x
1 Female   None     25     Female       None     0.4237288     Female
2   Male   None     17       Male       None     0.6800000       Male
3 Female   Some     12     Female       Some     0.2033898     Female
4   Male   Some      2       Male       Some     0.0800000       Male
5 Female Marked     22     Female     Marked     0.3728814     Female
6   Male Marked      6       Male     Marked     0.2400000       Male

区别在于
2
被添加到
i:i
(对于
i=1
,它是
1
),因为
的求值优先级高于
+

要按正确的顺序计算,冒号运算符的第二个参数需要括号,即

> i = 1L
> i:i + 2L
[1] 3

> i:(i + 2L)
[1] 1 2 3
该系统具有以下功能:

优先规则记录在?语法中,并查看R如何解释表达式 您可以查看解析树

所以你可以用你的表情来表达:

>  as.list(quote(i:i+2))
[[1]]
`+`

[[2]]
i:i

[[3]]
[1] 2

我鼓励您查看
?语法
,以更全面地了解R中运算符的优先级。

优先于
+
,因此您可以得到
1+2
的含义。。。试试
i:(i+2)
。或者
i+0:2
这是圆圈8.1.3:在@Mindy中的优先级一般来说,我发现
seq()
省钱多了。
>  as.list(quote(i:i+2))
[[1]]
`+`

[[2]]
i:i

[[3]]
[1] 2