我是R的新手,一直在写循环。有时我看到有人写:for (i in seq_along(x)),而其他时候他们写for (i in x)。两者之间有什么区别?它是否取决于x的属性?感谢帮助!
for (i in seq_along(x))
for (i in x)
qxsslcnc1#
考虑以下向量x:
x
x <- LETTERS[1:5] x [1] "A" "B" "C" "D" "E"
如果在x上执行for循环,则使用的是x的值:
for
for(i in x) print(i) [1] "A" [1] "B" [1] "C" [1] "D" [1] "E"
如果你使用seq_along,你将创建一个与x长度相同的整数序列:
seq_along
for(i in seq_along(x)) print(i) [1] 1 [1] 2 [1] 3 [1] 4 [1] 5
然而,我经常使用seq_along,因为用i来子集化x是很简单的,但是找到i的x的索引则需要更多的输入。
i
for(i in seq_along(x)) print(x[i]) [1] "A" [1] "B" [1] "C" [1] "D" [1] "E"
您有时可能会看到的另一种方法是使用1:length(x)。然而,正如@GregorThomas所指出的,这可能会导致意外的行为。考虑以下空向量y:
1:length(x)
y
y <- vector() for(i in seq_along(y)) print(1+i)
这将导致无输出,因为seq_along(y)计算为零长度向量。相反,考虑1:length(y):
seq_along(y)
1:length(y)
for(i in 1:length(y)) print(1+i) [1] 2 [1] 1
这是因为1:length(y)计算为c(1,0)。
c(1,0)
1条答案
按热度按时间qxsslcnc1#
考虑以下向量
x
:如果在
x
上执行for
循环,则使用的是x
的值:如果你使用
seq_along
,你将创建一个与x
长度相同的整数序列:然而,我经常使用
seq_along
,因为用i
来子集化x
是很简单的,但是找到i
的x
的索引则需要更多的输入。您有时可能会看到的另一种方法是使用
1:length(x)
。然而,正如@GregorThomas所指出的,这可能会导致意外的行为。考虑以下空向量
y
:这将导致无输出,因为
seq_along(y)
计算为零长度向量。相反,考虑
1:length(y)
:这是因为
1:length(y)
计算为c(1,0)
。