[R] Odp: several "ifelse" problems...
Petr PIKAL
petr.pikal at precheza.cz
Mon Feb 16 14:27:48 CET 2009
Hi
> x <- seq(0,1,.01)
> y <- ifelse(abs(x-.5)<=0.3,0,
+ ifelse(abs(w-.5)>=0.4,-1,
+ ifelse((0.1<w && w<0.2),10*x-2,-10*x+8)))
Error in storage.mode(test) <- "logical" : object "w" not found
what is w?
Why did you use &&?
& and && indicate logical AND and | and || indicate logical OR. The
shorter form performs elementwise comparisons in much the same way as
arithmetic operators. The longer form evaluates left to right examining
only the first element of each vector. Evaluation proceeds only until the
result is determined. The longer form is appropriate for programming
control-flow and typically preferred in if clauses.
If I changed w to x and && to & I got
> y <- ifelse(abs(x-.5)<=0.3,0,
+ ifelse(abs(x-.5)>=0.4,-1,
+ ifelse((0.1<x & x<0.2),10*x-2,-10*x+8)))
>
> y
[1] -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -0.9 -0.8
-0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0
[31] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0
Is this what you wanted?
Regards
Petr
r-help-bounces at r-project.org napsal dne 14.02.2009 06:08:25:
>
> Dear R users,
>
> >From the code below, I try to compute "y" value. (In fact, y looks like
a
> trapezoid)
>
> ------------------------------------------------------------------
>
> x <- seq(0,1,.01)
> y <- ifelse(abs(x-.5)<=0.3,0,
> ifelse(abs(w-.5)>=0.4,-1,
> ifelse((0.1<w && w<0.2),10*x-2,-10*x+8)))
>
> ------------------------------------------------------------------
>
> So, results are...
>
> ------------------------------------------------------------------
> > x
> [1] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12
0.13
> 0.14
> [16] 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27
0.28
> 0.29
> [31] 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42
0.43
> 0.44
> [46] 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57
0.58
> 0.59
> [61] 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.70 0.71 0.72
0.73
> 0.74
> [76] 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87
0.88
> 0.89
> [91] 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00
>
> > y
> [1] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 8 8 8 8 8 8 8 8 8 0 0
0
> 0 0
> [26] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0
> 0 0
> [51] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0
> 0 0
> [76] 0 0 0 0 0 8 8 8 8 8 8 8 8 8 8 -1 -1 -1 -1 -1 -1 -1
-1
> -1 -1
> [101] -1
> >
>
> ------------------------------------------------------------------
>
> However, even though the results show that y=8 for x=0.11, when x=0.11,
> actual y value is -0.9. And, y=-0.8 for x=0.88. I cannot understand
the
> above results.
>
> Any comments will be greatly appreciated.
>
> Kathryn Lord
> --
> View this message in context:
http://www.nabble.com/several-%22ifelse%22-
> problems...-tp22009321p22009321.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
More information about the R-help
mailing list