for循环中的索引和R中的if子句出错
index going wrong in for loop and if clauses in R
我有一个带有 if 语句的 for 循环。出于某种原因,代码在 i = .01
时未评估,它似乎仍在评估先前的 if 语句。代码产生这个:
boom for change 0.01 needs 0 quarters, 0 dimes, 0 nickels and 1 pennies
boom for change 0.02 needs 0 quarters, 0 dimes, 0 nickels and 2 pennies
boom for change 0.03 needs 0 quarters, 0 dimes, 0 nickels and 3 pennies
boom for change 0.04 needs 0 quarters, 0 dimes, 0 nickels and 4 pennies
zoom for change 0.05 needs 0 quarters, 0 dimes, 1 nickels and 0 pennies
zoom for change 0.06 needs 0 quarters, 0 dimes, 1 nickels and 1 pennies
zoom for change 0.07 needs 0 quarters, 0 dimes, 1 nickels and 2 pennies
zoom for change 0.08 needs 0 quarters, 0 dimes, 1 nickels and 3 pennies
zoom for change 0.09 needs 0 quarters, 0 dimes, 1 nickels and 4 pennies
zoom for change 0.1 needs 0 quarters, 0 dimes, 1 nickels and 5 pennies
不过我想读最后一行
haha for change 0.1 needs 0 quarters, 1 dimes, 0 nickels and 0 pennies
这是我的代码,您可以 运行 它并获得与我相同的结果。
testchange <- seq(.01,.1, by =.01)
q <- .25
d <- .1
n <- .05
p <- .01
qNumber <- 0
dNumber <- 0
nNumber <- 0
pNumber <- 0
for(i in testchange)
{
if(i < .05)
{pNumber <- (i*100)
testy <- "boom"}
else if( i >= .05 & i < .1)
{
testy <- "zoom"
if(i%%n == 0)
{nNumber <- (i/n)
newNum3 <- 0}
else if(i%%n != 0)
{newNum3 <- (100*(i%%n))}
if(newNum3 < 5)
{
pNumber <- newNum3
}
}
if( i >= .1 & i < .25)
{
testy <- "haha"
if(i%%d == 0)
{dNumber <- (i/d)
newNum2 <- 0
newNum3 <- 0}
else if(i%%d != 0)
{newNum2 <- (100*(i%%d))}
if(newNum2 >=5 )
{
if(newNum2%%n == 0)
{nNumber <- (i/n)
newNum3 <- 0}
else if(newNum2%%n != 0)
{ newNum3 <- (100*(i%%n))}
}
if(newNum2 < 5)
{
pNumber <- newNum2
}
if(newNum3 < 5)
{
pNumber <- newNum3
}
}
cat(testy, "for change " , i , " needs " , qNumber
, " quarters, " , dNumber , " dimes, " , nNumber
, " nickels and " , pNumber , " pennies","\n" )
}
这是舍入误差。循环的最后一步产生了一个非常接近但低于 0.1 的数字。如果你换行
if( i >= .1 & i < .25)
至
if( i + 0.00001 >= .1 & i < .25)
你会得到你期望的答案。请注意,您应该在其他地方进行许多类似的更改。
我有一个带有 if 语句的 for 循环。出于某种原因,代码在 i = .01
时未评估,它似乎仍在评估先前的 if 语句。代码产生这个:
boom for change 0.01 needs 0 quarters, 0 dimes, 0 nickels and 1 pennies
boom for change 0.02 needs 0 quarters, 0 dimes, 0 nickels and 2 pennies
boom for change 0.03 needs 0 quarters, 0 dimes, 0 nickels and 3 pennies
boom for change 0.04 needs 0 quarters, 0 dimes, 0 nickels and 4 pennies
zoom for change 0.05 needs 0 quarters, 0 dimes, 1 nickels and 0 pennies
zoom for change 0.06 needs 0 quarters, 0 dimes, 1 nickels and 1 pennies
zoom for change 0.07 needs 0 quarters, 0 dimes, 1 nickels and 2 pennies
zoom for change 0.08 needs 0 quarters, 0 dimes, 1 nickels and 3 pennies
zoom for change 0.09 needs 0 quarters, 0 dimes, 1 nickels and 4 pennies
zoom for change 0.1 needs 0 quarters, 0 dimes, 1 nickels and 5 pennies
不过我想读最后一行
haha for change 0.1 needs 0 quarters, 1 dimes, 0 nickels and 0 pennies
这是我的代码,您可以 运行 它并获得与我相同的结果。
testchange <- seq(.01,.1, by =.01)
q <- .25
d <- .1
n <- .05
p <- .01
qNumber <- 0
dNumber <- 0
nNumber <- 0
pNumber <- 0
for(i in testchange)
{
if(i < .05)
{pNumber <- (i*100)
testy <- "boom"}
else if( i >= .05 & i < .1)
{
testy <- "zoom"
if(i%%n == 0)
{nNumber <- (i/n)
newNum3 <- 0}
else if(i%%n != 0)
{newNum3 <- (100*(i%%n))}
if(newNum3 < 5)
{
pNumber <- newNum3
}
}
if( i >= .1 & i < .25)
{
testy <- "haha"
if(i%%d == 0)
{dNumber <- (i/d)
newNum2 <- 0
newNum3 <- 0}
else if(i%%d != 0)
{newNum2 <- (100*(i%%d))}
if(newNum2 >=5 )
{
if(newNum2%%n == 0)
{nNumber <- (i/n)
newNum3 <- 0}
else if(newNum2%%n != 0)
{ newNum3 <- (100*(i%%n))}
}
if(newNum2 < 5)
{
pNumber <- newNum2
}
if(newNum3 < 5)
{
pNumber <- newNum3
}
}
cat(testy, "for change " , i , " needs " , qNumber
, " quarters, " , dNumber , " dimes, " , nNumber
, " nickels and " , pNumber , " pennies","\n" )
}
这是舍入误差。循环的最后一步产生了一个非常接近但低于 0.1 的数字。如果你换行
if( i >= .1 & i < .25)
至
if( i + 0.00001 >= .1 & i < .25)
你会得到你期望的答案。请注意,您应该在其他地方进行许多类似的更改。