Dear R users,>From the code below, I try to compute "y" value. (In fact, y looks like atrapezoid) ------------------------------------------------------------------ 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.
Dear Kathie, On Fri, 13 Feb 2009 21:08:25 -0800 (PST) kathie <kathryn.lord2000 at gmail.com> wrote:> Dear R users, > [snip] > > 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.It may help you to understand those results when you look at the difference between 0.1 < x & x < 0.2 and 0.1 < x && x < 0.2 Your code used the latter but I strongly suspect you wanted the former. HTH. Best wishes, Berwin =========================== Full address ============================Berwin A Turlach Tel.: +65 6516 4416 (secr) Dept of Statistics and Applied Probability +65 6516 6650 (self) Faculty of Science FAX : +65 6872 3919 National University of Singapore 6 Science Drive 2, Blk S16, Level 7 e-mail: statba at nus.edu.sg Singapore 117546 http://www.stat.nus.edu.sg/~statba
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 likea> 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.120.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.270.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.420.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.570.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.720.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.870.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 00> 0 0 > [26] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00> 0 0 > [51] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00> 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 understandthe> 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 guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
do you mean: f=function(x) 0*(abs(x-.5)<=.3)-1*(abs(x-.5)>=.4)+(10*x-2)*(x>.1&x<.2)+(-10*x+8)*(x>=.2&x<=.5) f(x) curve(f,0,1) hope it helps. Patrizio 2009/2/14 kathie <kathryn.lord2000 at gmail.com>:> > 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. >