R代表循环:何时在seq_沿着(x)中使用i以及何时在x中使用i

vlf7wbxs  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(102)

我是R的新手,一直在写循环。有时我看到有人写:for (i in seq_along(x)),而其他时候他们写for (i in x)。两者之间有什么区别?它是否取决于x的属性?感谢帮助!

qxsslcnc

qxsslcnc1#

考虑以下向量x

x <- LETTERS[1:5]
x
[1] "A" "B" "C" "D" "E"

如果在x上执行for循环,则使用的是x的值:

for(i in x) print(i)
[1] "A"
[1] "B"
[1] "C"
[1] "D"
[1] "E"

如果你使用seq_along,你将创建一个与x长度相同的整数序列:

for(i in seq_along(x)) print(i)
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

然而,我经常使用seq_along,因为用i来子集化x是很简单的,但是找到ix的索引则需要更多的输入。

for(i in seq_along(x)) print(x[i])
[1] "A"
[1] "B"
[1] "C"
[1] "D"
[1] "E"

您有时可能会看到的另一种方法是使用1:length(x)。然而,正如@GregorThomas所指出的,这可能会导致意外的行为。
考虑以下空向量y

y <- vector()
for(i in seq_along(y)) print(1+i)

这将导致无输出,因为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)

相关问题