使用变量对data.frame取连续7行子集的错误原因及解决方法
问题原因与解决方案
为什么原代码无法得到预期结果?
这是因为R的运算符优先级在搞鬼!在R中,:(生成序列的运算符)的优先级比+(加法)更高。当你执行begin_row:begin_row+6时,R会先计算begin_row:begin_row——也就是生成一个只包含begin_row值(这里是4)的向量,然后再给这个向量加上6,最终得到的是4+6=10。所以你的代码实际执行的是iris[10,],只能取出第10行,自然不是你想要的7行子集。
正确的实现方法
这里有几种靠谱的写法,任选其一即可:
给加法运算加括号,强制改变运算顺序:
begin_row = 4 iris[begin_row:(begin_row+6),]括号会让R先计算
begin_row+6得到10,再生成4:10的序列,这样就能正确取出第4到第10行(共7行)。使用
seq()函数,更直观地指定序列:begin_row = 4 iris[seq(from = begin_row, length.out = 7),]这种写法直接明确了起始位置和需要的行数,可读性更强,也不容易因为运算符优先级踩坑。
给两端都加括号(和第一种本质一致,写法更清晰):
begin_row = 4 iris[(begin_row):(begin_row+6),]
内容的提问来源于stack exchange,提问作者userJT
相关产品推荐
相关产品推荐

