An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20090328/6a97fe4a/attachment-0002.pl>
how to get all iterations if I meet NaN?
8 messages · huiming song, Uwe Ligges, Patrizio Frederic +2 more
huiming song wrote:
hi, everybody, please help me with this question:
If I want to do iteration for 1000 times, however, for the 500th iteration,
there is NaN appears. Then the iteration will stop. If I don't want the stop
and want the all the 1000 iterations be done. What shall I do?
suppose I have x[1:1000] and z[1:1000],I want to do some calculation for all
x[1] to x[1000].
z=rep(0,1000)
for (i in 1:1000){
z[i]=sin(1/x[i])
}
if x[900] is 0, in the above code it will not stop when NaN appears. Suppose
when sin(1/x[900]) is NaN appears and the iteration will now fulfill the
rest 100 iterations. How can I write a code to let all the 1000 iterations
be done?
See ?try Uwe Ligges
Thanks! [[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
2009/3/27 huiming song <huimings at gmail.com>:
hi, everybody, please help me with this question:
If I want to do iteration for 1000 times, however, for the 500th iteration,
there is NaN appears. Then the iteration will stop. If I don't want the stop
and want the all the 1000 iterations be done. What shall I do?
suppose I have x[1:1000] and z[1:1000],I want to do some calculation for all
x[1] to x[1000].
z=rep(0,1000)
for (i in 1:1000){
?z[i]=sin(1/x[i])
}
if x[900] is 0, in the above code it will not stop when NaN appears. Suppose
when sin(1/x[900]) is NaN appears and the iteration will now fulfill the
rest 100 iterations. How can I write a code to let all the 1000 iterations
be done?
not sure I properly understood. Consider: x = seq(-pi,pi,length=1001) z = sin(1/x) # Warning message: # In sin(1/x) : NaNs produced x[500:502]; z[500:502] # [1] -0.006283185 0.000000000 0.006283185 # [1] -0.8754095 NaN 0.8754095 one NaN and one warning have been created, the remaining 1000 calculations has been executed. lim(x->0)sin(1/x) not exists so sin(1/0) is not a number nan z1 = z[!is.nan(z)] x1 = x[!is.nan(z)] # x and z without the z's nan position hope that help Patrizio
hi, you can try this method. ## if x is a vector x <- runif(1000) ## if sin(1/0) will appear NaN. we make the situation. x[sample(1:length(x),5)] <- 0 z <- suppressWarnings(ifelse(is.na(sin(1/x)),NA,sin(1/x))) is.numeric(z) ## if x is a matrix x=matrix(runif(1000),100,10) x[sample(1:nrow(x),50),sample(1:ncol(x),5)] <- 0 z <- suppressWarnings(ifelse(is.na(sin(1/x)),NA,sin(1/x))) is.numeric(z) On Sat, 28 Mar 2009 01:36:36 +0800, huiming song wrote
hi, everybody, please help me with this question:
If I want to do iteration for 1000 times, however, for the 500th
iteration, there is NaN appears. Then the iteration will stop. If I
don't want the stop and want the all the 1000 iterations be done.
What shall I do?
suppose I have x[1:1000] and z[1:1000],I want to do some calculation
for all x[1] to x[1000].
z=rep(0,1000)
for (i in 1:1000){
z[i]=sin(1/x[i])
}
if x[900] is 0, in the above code it will not stop when NaN appears.
Suppose when sin(1/x[900]) is NaN appears and the iteration will now
fulfill the rest 100 iterations. How can I write a code to let all
the 1000 iterations be done?
Thanks!
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-
guide.html
and provide commented, minimal, self-contained, reproducible code.
-- Nash - morrison at ibms.sinica.edu.tw
Nash wrote:
hi, you can try this method. ## if x is a vector x <- runif(1000) ## if sin(1/0) will appear NaN. we make the situation. x[sample(1:length(x),5)] <- 0 z <- suppressWarnings(ifelse(is.na(sin(1/x)),NA,sin(1/x))) is.numeric(z) ## if x is a matrix x=matrix(runif(1000),100,10) x[sample(1:nrow(x),50),sample(1:ncol(x),5)] <- 0 z <- suppressWarnings(ifelse(is.na(sin(1/x)),NA,sin(1/x))) is.numeric(z)
Please read the question more carefully, the sin() example was used as a method that does not give an error but works as expected (just with the warning), but the question is how not to break the loop, and so my answer was "see ?try". Uwe Ligges
On Sat, 28 Mar 2009 01:36:36 +0800, huiming song wrote
hi, everybody, please help me with this question:
If I want to do iteration for 1000 times, however, for the 500th
iteration, there is NaN appears. Then the iteration will stop. If I
don't want the stop and want the all the 1000 iterations be done.
What shall I do?
suppose I have x[1:1000] and z[1:1000],I want to do some calculation
for all x[1] to x[1000].
z=rep(0,1000)
for (i in 1:1000){
z[i]=sin(1/x[i])
}
if x[900] is 0, in the above code it will not stop when NaN appears.
Suppose when sin(1/x[900]) is NaN appears and the iteration will now
fulfill the rest 100 iterations. How can I write a code to let all
the 1000 iterations be done?
Thanks!
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-
guide.html
and provide commented, minimal, self-contained, reproducible code.
-- Nash - morrison at ibms.sinica.edu.tw
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Uwe Ligges wrote: Please read the question more carefully, the sin() example was used as a method that does not give an error but works as expected (just with the warning), but the question is how not to break the loop, and so my answer was "see ?try".
So, Do you have any solution about his problem ?
On Sat, 28 Mar 2009 01:36:36 +0800, huiming song wrote
hi, everybody, please help me with this question:
If I want to do iteration for 1000 times, however, for the 500th
iteration, there is NaN appears. Then the iteration will stop. If I
don't want the stop and want the all the 1000 iterations be done.
What shall I do?
suppose I have x[1:1000] and z[1:1000],I want to do some calculation
for all x[1] to x[1000].
z=rep(0,1000)
for (i in 1:1000){
z[i]=sin(1/x[i])
}
if x[900] is 0, in the above code it will not stop when NaN appears.
Suppose when sin(1/x[900]) is NaN appears and the iteration will now
fulfill the rest 100 iterations. How can I write a code to let all
the 1000 iterations be done?
Thanks!
On Sat, 28 Mar 2009 16:35:24 +0100, Uwe Ligges wrote
Nash wrote:
hi, you can try this method. ## if x is a vector x <- runif(1000) ## if sin(1/0) will appear NaN. we make the situation. x[sample(1:length(x),5)] <- 0 z <- suppressWarnings(ifelse(is.na(sin(1/x)),NA,sin(1/x))) is.numeric(z) ## if x is a matrix x=matrix(runif(1000),100,10) x[sample(1:nrow(x),50),sample(1:ncol(x),5)] <- 0 z <- suppressWarnings(ifelse(is.na(sin(1/x)),NA,sin(1/x))) is.numeric(z)
Please read the question more carefully, the sin() example was used as a method that does not give an error but works as expected (just with the warning), but the question is how not to break the loop, and so my answer was "see ?try". Uwe Ligges
On Sat, 28 Mar 2009 01:36:36 +0800, huiming song wrote
hi, everybody, please help me with this question:
If I want to do iteration for 1000 times, however, for the 500th
iteration, there is NaN appears. Then the iteration will stop. If I
don't want the stop and want the all the 1000 iterations be done.
What shall I do?
suppose I have x[1:1000] and z[1:1000],I want to do some calculation
for all x[1] to x[1000].
z=rep(0,1000)
for (i in 1:1000){
z[i]=sin(1/x[i])
}
if x[900] is 0, in the above code it will not stop when NaN appears.
Suppose when sin(1/x[900]) is NaN appears and the iteration will now
fulfill the rest 100 iterations. How can I write a code to let all
the 1000 iterations be done?
Thanks!
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-
guide.html
and provide commented, minimal, self-contained, reproducible code.
-- Nash - morrison at ibms.sinica.edu.tw
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-
guide.html
and provide commented, minimal, self-contained, reproducible code.
-- Nash - morrison at ibms.sinica.edu.tw
Nash wrote:
Uwe Ligges wrote: Please read the question more carefully, the sin() example was used as a method that does not give an error but works as expected (just with the warning), but the question is how not to break the loop, and so my answer was "see ?try".
So, Do you have any solution about his problem ?
Yes he does: Use try().
This may not be very specific, but neither was the original question.
The poster didn't give an example that we could fix, only the sin()
example that he wanted his own code to work _like_.
So to answer the question with working code, one first needs to invent a
broken example. Perhaps something like
for(i in 2:-2) {
x <- try(chol(as.matrix(i)))
if(inherits(x,"try-error")) x <- NaN
print(x)
}
O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
Okay! Thank you! On Sun, 29 Mar 2009 10:01:29 +0200, Peter Dalgaard wrote
Nash wrote:
Uwe Ligges wrote: Please read the question more carefully, the sin() example was used as a method that does not give an error but works as expected (just with the warning), but the question is how not to break the loop, and so my answer was "see ?try".
So, Do you have any solution about his problem ?
Yes he does: Use try().
This may not be very specific, but neither was the original
question. The poster didn't give an example that we could fix, only
the sin() example that he wanted his own code to work _like_.
So to answer the question with working code, one first needs to
invent a broken example. Perhaps something like
for(i in 2:-2) {
x <- try(chol(as.matrix(i)))
if(inherits(x,"try-error")) x <- NaN
print(x)
}
--
O__ ---- Peter Dalgaard ?ter Farimagsgade 5, Entr.B
c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
-- Nash - morrison at ibms.sinica.edu.tw