理解R中的简单for循环

时间:2015-09-05 04:59:45

标签: r for-loop

为什么以下代码会生成

x=10:14
for (i in x) {
    print(x)
}

此输出

[1] 10 11 12 13 14
[1] 10 11 12 13 14
[1] 10 11 12 13 14
[1] 10 11 12 13 14
[1] 10 11 12 13 14   

我认为for循环会执行5次。这适用于x=10,x=11,x=12,x=13,x=14,并且每次都打印x,以便它只输出10 11 12 13 14

为什么循环25次?

我是R的新手。所以有人可以告诉我这里发生了什么

2 个答案:

答案 0 :(得分:0)

您首先定义了一个序列x <- 10:14。由于你是R的初学者,值得指出的是,将=用于作业一般被认为是不好的做法,尽管R容忍这种“方言”,这种方言通常由没有经验的R程序员使用。其他编程语言。

无论如何,在这种情况下,你的循环变量是i。循环运行五次,因为i的值遍历x定义的范围,即10,11,12,13,14。

但是,在循环中,您永远不会使用i的值。例如,您可以像上面的评论中所建议的那样简单地使用print(i),并查看值如何从10更改为14.相反,您每次都打印x的值,这是一个在循环外定义的向量,永远不会改变。此向量x包含五个元素10,11,12,13,14,每次调用函数print(x)时都会显示这些元素。由于x包含五个数字,因此您的输出中总共会获得25个打印数字。

总之,你的循环打印包含五个元素的相同向量的五倍。 希望这会有所帮助。

答案 1 :(得分:0)

它按预期工作,应该使用其他语言

让我们看一个例子 在java中:

List<Integer> y=Arrays.asList(10,11,12,13,14);
for(int i : y)
{
System.out.println(y);
}

它会做同样的事情。为i = 10,11,12,13,14的值打印完成List y的值各5次。这是输出

[10, 11, 12, 13, 14]
[10, 11, 12, 13, 14]
[10, 11, 12, 13, 14]
[10, 11, 12, 13, 14]
[10, 11, 12, 13, 14]

在R中也是如此。如果你想在x中打印元素列表,你可以做任何一个

x<-10:14
for (i in x) {
    print(i)
}

它会起作用,因为我自己正在经历x的值。

或者如果你想与其他编程语言联系,你可以这样做。

x<-10:14
for (i in seq_along(x)) {
    print(x[i])
}