[R] ifelse question (I'm not sure why this is working)...

William Dunlap wdunlap at tibco.com
Tue Sep 10 21:58:33 CEST 2013


> remainderFunction<-function(x,d)
> {
>    ifelse(x%%d==0,yes=return(which(x%%d==0)),no=return(NULL))
> }
> remainderFunction(x=c(23:47),d=3)

The above call returns c(2, 5, 8, 11, 14, 17, 20, 23), the value of (23:47)%%3.
Note that remainderFunction(integer(0), 3) returns logical(0).

The return() calls in the call to ifelse cause the problem.  The one used
for the second argument to ifelse causes remainderFunction to return,
abandoning the evaluation of ifself, as soon as ifelse evaluates its second
argument.

I think that using return this way is bad practice, but have seen it in code like
   tryCatch(return(something),
                    error=function(e)"Error in something")
which is common in support code for RStudio.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Jonathan Greenberg
> Sent: Tuesday, September 10, 2013 12:40 PM
> To: r-help
> Subject: [R] ifelse question (I'm not sure why this is working)...
> 
> R-helpers:
> 
> One of my intrepid students came up with a solution to a problem where
> they need to write a function that takes a vector x and a "scalar" d,
> and return the indices of the vector x where x %% d is equal to 0 (x
> is evenly divisible by d).  I thought I had a good handle on the
> potential solutions, but one of my students sent me a function that
> WORKS, but for the life of me I can't figure out WHY.  Here is the
> solution:
> 
> remainderFunction<-function(x,d)
> {
>    ifelse(x%%d==0,yes=return(which(x%%d==0)),no=return(NULL))
> }
> remainderFunction(x=c(23:47),d=3)
> 
> I've never seen an ifelse statement used that way, and I was fully
> expecting that to NOT work, or to place the output of which(x%%d==0)
> in each location where the statement x%%d==0 was true.
> 
> Any ideas on deconstructing this?
> 
> --j
> 
> --
> Jonathan A. Greenberg, PhD
> Assistant Professor
> Global Environmental Analysis and Remote Sensing (GEARS) Laboratory
> Department of Geography and Geographic Information Science
> University of Illinois at Urbana-Champaign
> 607 South Mathews Avenue, MC 150
> Urbana, IL 61801
> Phone: 217-300-1924
> http://www.geog.illinois.edu/~jgrn/
> AIM: jgrn307, MSN: jgrn307 at hotmail.com, Gchat: jgrn307, Skype: jgrn3007
> 
> ______________________________________________
> 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