[R] If-statement in for-loop
Gerrit Eichner
Gerrit.Eichner at math.uni-giessen.de
Wed Dec 11 10:14:58 CET 2013
Hello, "gncl dzgn",
your problem has a flavor of homework which is usually not delt with on
this list. However, a few comments:
0. The description of your problem is rather vague, in particular, the
meaning of "input" in the description of your "conditions" is unclear! (By
the way, your main problem is probably not the inclusion of the
conditions; see 2.)
Note: "PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html and provide commented,
minimal, self-contained, reproducible code."
^^^^^^^
1. Do not use variable names like t, T, c, s because they already exist as
R-objects.
2. Have you noticed the warnings "In s >= d : longer object length is not
a multiple of shorter object length" and "In s + b * (0:T) : longer object
length is not a multiple of shorter object length"? Apparently the
involved objects (s, d, b and T) do not "fit together". Hint: Compare the
lenght of s with the lengths of d and 0:T!
3. Do not run the code all at once, but either without the for-loops line
by line with j and i set to approriate values (like i = 1 and j = 2), or
with the for-loops, but with N and T very small, e. g. N = 1 and T = 2 to
start with. Alternatively, you could also take a look at the function
browser() (and include it in the bodies of your for-loops).
4. Another hint: Your if-else-statement
if(x < minx) {
s[i] <- minx
} else {
if(x > maxx) {
s[i] <- maxx
} else s[i] <- x
}
appears be simplifiable to
s[i] <- min( max( x, minx), maxx)
Hth -- Gerrit
> Hi everyone,
>
> you might find my question elementary but I am a beginner and
> unfortunately I can't fix the problem.
>
> So, I simulate this following algorithm and some values of c are NA.
> Therefore, I should add these following two if-statements but I don't
> know how I should do it in a for-loop.
>
> Thank in advance if someone helps me!
>
> The conditions:
>
> If there is no input greater or equal to d, then ALG = b*T
> If max(s + b*(0:T)) < b*T , then OPT = b*T
>
>
> The algorithm:
>
> a <- 0.0008
> b <- 0.0001
> T <- 100
> t <- 0:T
> alpha <- 1
>
> d<- sqrt(a * b) * T - b * t
>
> N <- 100
> c <- rep(0, N)
> for (j in 1:N) {
>
> e <- rnorm(T, mean = 0, sd = 0.001)
> s<- c( runif(1,0, a*T), rep(0, T-1) )
> minx <- 0
> for(i in 2:T) {
> x <- alpha * s[i-1] + e[i]
> maxx <- a*(T-i)
> if(x < minx) {
> s[i] <- minx
> } else {
> if(x > maxx) {
> s[i] <- maxx
> } else s[i] <- x
> }
> }
>
> p<- which(s >= d)[1]
> ALG<- s[p] + b*(p-1)
> OPT <- max(s + b*(0:T))
>
> c[j] <- OPT / ALG
>
> }
>
> head(c)
> mean(c)
> plot(c)
>
More information about the R-help
mailing list