[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