我有以下代码:
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
最后两排让我感到困惑。如果这是边界包含/排除的情况,则在1,2,3,4之后总是打印6,但它仅在5之后发生。此外,最后一对5,5也没有意义。
答案 0 :(得分:4)
它完全符合您的要求:
6:5
#[1] 6 5
见
?`:`
了解更多信息。
答案 1 :(得分: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
时打印值(我认为这就是您所谓的“重复值对”)。
答案 2 :(得分: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
答案 3 :(得分:0)
尝试写if状态。 像
这样的东西for(i in(1:5) )
{
if (i < 4) {
for(j in ( (i+1) :5) )
{
cat (i,", ",j,"\n")
}
}
}