[R] outer

Peter Holzer holzer at stat.math.ethz.ch
Thu May 10 09:59:49 CEST 2001


Hello Sean

When using outer you need vectorized functions. I think in your case it
would be enough to change the last line of your function to

ifelse(r==0, y, gcd(y,r))

Cheers, Peter

Sean Carmody writes:
 > I've just begun playing around with defining functions in R and
 > I'm not really sure what's going on in the following situation.
 > 
 > I've defined the following function:
 > 
 > gcd <- function(x,y) {
 > 	x <- as.integer(x); y <- as.integer(y)
 > 	q <- as.integer(x / y)
 > 	r <- x - q * y
 > 	if (r==0) y else gcd(y,r)
 > }
 > 
 > As expected, it gives the following results:
 > 
 > > gcd(3,2)
 > [1] 1
 > 
 > > gcd(2,4)
 > [1] 2
 > 
 > etc. However, the function behaves strangely with outer:
 > 
 > > outer(1:5,1:5,gcd)
 >      [,1] [,2] [,3] [,4] [,5]
 > [1,]    1    2    3    4    5
 > [2,]    1    2    3    4    5
 > [3,]    1    2    3    4    5
 > [4,]    1    2    3    4    5
 > [5,]    1    2    3    4    5
 > 
 > If i change the second line of the definition of gcd to
 > 
 > 	y <- as.integer(x); x <- as.integer(y)
 > 
 > then the effect of gcd should not change, and the following
 > results still hold:
 > 
 > > gcd(3,2)
 > [1] 1
 > 
 > > gcd(2,4)
 > [1] 2
 > 
 > however, now outer gives a different result:
 > 
 > > outer(1:5,1:5,gcd)
 >      [,1] [,2] [,3] [,4] [,5]
 > [1,]    1    1    1    1    1
 > [2,]    2    2    2    2    2
 > [3,]    3    3    3    3    3
 > [4,]    4    4    4    4    4
 > [5,]    5    5    5    5    5
 > 
 > Somehow something strange seems to be happening to the
 > internal variable r when outer is used, but I'm not sure what
 > or why. Any thoughts would be appreciated.
 > 
 > Sean.
 > 
 > 
 > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
 > r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
 > Send "info", "help", or "[un]subscribe"
 > (in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
 > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list