Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止在R中的双循环中运行i=j?_R_For Loop - Fatal编程技术网

如何防止在R中的双循环中运行i=j?

如何防止在R中的双循环中运行i=j?,r,for-loop,R,For Loop,我想阻止运行I=j案例,并将其替换为R中的NA。这里我准备了一个小例子。当i=j时,我有输出0。但是我想把它打印成NA。我怎么做这个?谢谢 n = 5 for(j in 1:(n-1)){ for(i in 0:(n-2)){ print(2^(abs(i-j))) } } 输出是2,1,2,4,if(i==j){print(NA)}else{…}或者if(i==j){print(NA);break}或者if(i==j){print(NA)}else{…}或者if(i==j){

我想阻止运行
I=j
案例,并将其替换为
R
中的
NA
。这里我准备了一个小例子。当
i=j
时,我有输出
0
。但是我想把它打印成
NA
。我怎么做这个?谢谢

n = 5
for(j in 1:(n-1)){
  for(i in 0:(n-2)){
    print(2^(abs(i-j)))
  }
}

输出是
2,1,2,4,
if(i==j){print(NA)}else{…}
或者
if(i==j){print(NA);break}
或者
if(i==j){print(NA)}else{…}
或者
if(i==j){print(NA);break}
为什么不使用
语句

n = 5
for(j in 1:(n-1)){
  for(i in 0:(n-2)){
    if(i == j){
      print(NA)
    } else{
      print(2^(abs(i-j)))
      
    }
  }
}

为什么不使用
if
语句

n = 5
for(j in 1:(n-1)){
  for(i in 0:(n-2)){
    if(i == j){
      print(NA)
    } else{
      print(2^(abs(i-j)))
      
    }
  }
}

为了好玩,这里有一个矢量化版本,根据
n
的大小,它可能更高效。它返回一个向量,如果这是您想要的输出,您可以逐行打印该向量。 其思想是使用
expand.grid
从嵌套循环生成对,然后将这些向量彼此相减,并将i==j(即差值为0)的情况设置为NA

2^abs({

rd只是为了好玩,这里有一个矢量化版本,根据
n
的大小,它可能会更有效。它返回一个矢量,如果这是您想要的输出,您可以逐行打印。 其思想是使用
expand.grid
从嵌套循环生成对,然后将这些向量彼此相减,并将i==j(即差值为0)的情况设置为NA

2^abs({

rd您可以尝试
ifelse
if…else…
。下面是一个使用
ifelse
的选项:

n <- 5
for (j in 1:(n - 1)) {
  for (i in 0:(n - 2)) {
    print(ifelse(i == j, NA, 2^(abs(i - j))))
  }
}

另一种选择是使用
NA^(i==j)
作为掩码,例如

n <- 5
for (j in 1:(n - 1)) {
  for (i in 0:(n - 2)) {
    print(2^(abs(i - j)) * NA^(i == j))
  }
}

n您可以尝试
ifelse
if…else…

n <- 5
for (j in 1:(n - 1)) {
  for (i in 0:(n - 2)) {
    print(ifelse(i == j, NA, 2^(abs(i - j))))
  }
}

另一种选择是使用
NA^(i==j)
作为掩码,例如

n <- 5
for (j in 1:(n - 1)) {
  for (i in 0:(n - 2)) {
    print(2^(abs(i - j)) * NA^(i == j))
  }
}

n谢谢。我如何从打印中跳过
I=j
I>j
案例?谢谢。我如何从打印中跳过
I=j
I>j
案例?谢谢。我想知道如何从打印中跳过
I=j
案例?当
I>=j
然后
I-j>=0
那么就替换
rd[rd==0]=0]谢谢。我想知道如何从打印中跳过
I=j
I>j
案例?当
I>=j
那么
I-j>=0
就替换
rd[rd==0]=0]