# [R] outer() function

Patrick Burns pburns at pburns.seanet.com
Fri Mar 24 10:56:05 CET 2006

```While it is true that the FAQ on 'outer' technically
covers this problem, this isn't the typical case and
may still be puzzling to the original poster.

The typical problem with 'outer' is that the function
returns a scalar even when the input is a vector
with multiple elements.

The function in this case is vectorized in the sense
that it returns the same number of elements as its
input.  The problem is that the elements are not
independent.  The stricter sense of vectorization
that 'outer' requires is that a subset of the elements
of the input returns the corresponding subset of
elements of the result.  This is not true for the function
in this example, and is where the trouble lies.

Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")

Kyle LaMalfa wrote:

>Greetings R-help community,
>
>I am relatively new to R, which may be why I am having trouble
>understanding this problem.  I am trying to use outer() to generate a
>graphable surface of a function.  If there is a better way to do this,
>I would appreciate the insight.  Otherwise, could someone suggest a
>method to get the outer() function to work here?
>
>Below is my simplified R program.  Further down is the output.
>
>Kyle
>
>###################
>
>	data <- c(0, 1, 2, 3)
>	x <- c(0,2,4)
>	y <- c(0,1,2)
>
>	f <- function(x, y) sum(data*x)+y
>	f(0,0); f(2,0); f(4,0);
>	f(0,1); f(2,1); f(4,1);
>	f(0,2); f(2,2); f(4,2);
>	outer(x, y, f)
>
>	f <- function(x, y) x-x+y-y+force(sum(data^x))
>	outer(x, y, f)
>
>##################################
>
>
>
>>data <- c(0, 1, 2, 3)
>>x <- c(0,2,4)
>>y <- c(0,1,2)
>>
>>f <- function(x, y) sum(data*x)+y
>>f(0,0); f(2,0); f(4,0);
>>
>>
> 0
> 12
> 24
>
>
>>f(0,1); f(2,1); f(4,1);
>>
>>
> 1
> 13
> 25
>
>
>>f(0,2); f(2,2); f(4,2);
>>
>>
> 2
> 14
> 26
>
>
>>outer(x, y, f)
>>
>>
>     [,1] [,2] [,3]
>[1,]   20   21   22
>[2,]   20   21   22
>[3,]   20   21   22
>Warning message:
>longer object length
>        is not a multiple of shorter object length in: data * x
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help