0

我有以下代码:

for(i in(1:5) )
{
    for(j in ( (i+1) :5) )
{
    cat (i,", ",j,"\n")

}
}

我的期望是,它会列出从 1 到 5 的所有数字对。但是,当我运行上述 R 脚本时,我得到以下结果。

1 ,  2 
1 ,  3 
1 ,  4 
1 ,  5 
2 ,  3 
2 ,  4 
2 ,  5 
3 ,  4 
3 ,  5 
4 ,  5 
5 ,  6 
5 ,  5 

最后两行完全让我感到困惑。如果这是边界包含/排除的情况,6 总是会在 1、2、3、4 之后打印,但它只会在 5 之后发生。此外,最后一对 5,5 也没有任何意义。

4

4 回答 4

4

它完全按照您的要求执行:

6:5
#[1] 6 5

?`:`

了解更多信息。

于 2013-09-09T16:22:14.723 回答
3

我认为你的循环应该是,

for(i in(1:5) )
{
  for(j in ( (i) :5) )
  {
    cat (i,", ",j,"\n")

  }
}

1 ,  1 
1 ,  2 
1 ,  3 
1 ,  4 
1 ,  5 
2 ,  2 
2 ,  3 
2 ,  4 
2 ,  5 
3 ,  3 
3 ,  4 
3 ,  5 
4 ,  4 
4 ,  5 
5 ,  5 

更新

为了获得类似于以下combn条件if(·)的结果:

for(i in(1:5) )
{
  for(j in ( (i) :5) )
  {
    if(i!=j){
      cat (i,", ",j,"\n")
    }

  }
}

这样你就可以避免在i等于时打印值j(我认为这就是你所说的“重复值对”)。

于 2013-09-09T16:26:15.760 回答
2

您可以使用以下方法获得:

t(combn(5, 2))

结果:

      [,1] [,2]
 [1,]    1    2
 [2,]    1    3
 [3,]    1    4
 [4,]    1    5
 [5,]    2    3
 [6,]    2    4
 [7,]    2    5
 [8,]    3    4
 [9,]    3    5
[10,]    4    5
于 2013-09-09T16:40:25.693 回答
0

尝试写 if 状态。就像是

for(i in(1:5) )
{
    if (i < 4) {
        for(j in ( (i+1) :5) )
        {
            cat (i,", ",j,"\n")
        }
    }
}
于 2013-09-09T16:27:02.030 回答