如何在R中使用冒号运算符编写Java样式for循环?

时间:2013-06-04 15:45:05

标签: r for-loop colon

我想编写一个Java风格的for循环,如下所示:

for (int i = 1; i <= 3; ++i) {
    for (int j = 1; j <= i-1; ++j) {
        System.out.println(i + " " + j);
    }
}

运行上述代码的输出将是

2 1
3 1
3 2

我在R中对此进行编码的尝试如下:

for (i in 1:3) {
    for (j in 1:(i-1)) {
        print(sprintf('%d %d', i, j))
    }
}

但是,运行此R代码会提供输出

[1] "1 1"
[1] "1 0"
[1] "2 1"
[1] "3 1"
[1] "3 2" 

我意识到这种情况正在发生,因为1:0 = c(1,0)。 使用seq(1,0)无效,因为seq(1,0) = c(1,0)。 编写这两个for循环的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以将内部for替换为while

for (i in 1:3) {
    j <- 1
    while (j < i) {
        print(sprintf('%d %d', i, j))
        j <- j + 1
    }
}

假设Java的for与C类似,那么从语义上讲,基本上就是这样。