> 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: [email protected] [mailto:[email protected]] 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: [email protected], Gchat: jgrn307, Skype: jgrn3007
> 
> ______________________________________________
> [email protected] 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.

______________________________________________
[email protected] 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.

Reply via email to