如何防止在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]