outer() function

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

outer() function

Kyle LaMalfa
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.

Thanks in advance,
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);
[1] 0
[1] 12
[1] 24
> f(0,1); f(2,1); f(4,1);
[1] 1
[1] 13
[1] 25
> f(0,2); f(2,2); f(4,2);
[1] 2
[1] 14
[1] 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

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: outer() function

Thomas Lumley
On Thu, 23 Mar 2006, 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?
>

It's a FAQ (7.17).

  -thomas



> Below is my simplified R program.  Further down is the output.
>
> Thanks in advance,
> 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);
> [1] 0
> [1] 12
> [1] 24
>> f(0,1); f(2,1); f(4,1);
> [1] 1
> [1] 13
> [1] 25
>> f(0,2); f(2,2); f(4,2);
> [1] 2
> [1] 14
> [1] 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
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

Thomas Lumley Assoc. Professor, Biostatistics
[hidden email] University of Washington, Seattle

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: outer() function

Gabor Grothendieck
In reply to this post by Kyle LaMalfa
This is a FAQ:

http://cran.r-project.org/doc/manuals/R-FAQ.html#Why-does-outer_0028_0029-behave-strangely-with-my-function_003f

On 3/23/06, Kyle LaMalfa <[hidden email]> 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.
>
> Thanks in advance,
> 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);
> [1] 0
> [1] 12
> [1] 24
> > f(0,1); f(2,1); f(4,1);
> [1] 1
> [1] 13
> [1] 25
> > f(0,2); f(2,2); f(4,2);
> [1] 2
> [1] 14
> [1] 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
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: outer() function

Patrick Burns
In reply to this post by Kyle LaMalfa
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
[hidden email]
+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.
>
>Thanks in advance,
>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);
>>    
>>
>[1] 0
>[1] 12
>[1] 24
>  
>
>>f(0,1); f(2,1); f(4,1);
>>    
>>
>[1] 1
>[1] 13
>[1] 25
>  
>
>>f(0,2); f(2,2); f(4,2);
>>    
>>
>[1] 2
>[1] 14
>[1] 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
>
>______________________________________________
>[hidden email] mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
>
>  
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: outer() function

Kyle LaMalfa
Thanks for your responses,

I decided to write customized FOR loops rather than get too deep into the
subtlties of why OUTER doesn't behave like I expected it to.
It might be good to include a specific, non-technical warning for newbies
like myself in future versions of installed R-help.



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.
> >
> >Thanks in advance,
> >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);
> >>
> >>
> >[1] 0
> >[1] 12
> >[1] 24
> >
> >
> >>f(0,1); f(2,1); f(4,1);
> >>
> >>
> >[1] 1
> >[1] 13
> >[1] 25
> >
> >
> >>f(0,2); f(2,2); f(4,2);
> >>
> >>
> >[1] 2
> >[1] 14
> >[1] 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
> >
> >______________________________________________
> >[hidden email] mailing list
> >https://stat.ethz.ch/mailman/listinfo/r-help
> >PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
> >
> >
> >
> >
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html