Skip to content
Prev 174872 / 398503 Next

Doing %o% that operates on columns instead of atomics

Okay, this one is hard to put into words:
1  2  3  4  5  6  7  8  9
1 1  2  3  4  5  6  7  8  9
2 2  4  6  8 10 12 14 16 18
3 3  6  9 12 15 18 21 24 27
4 4  8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81
---------------------------------------------------------------------

What I would like to do is apply my.foo() which takes two columns, a and b,
does an operation and returns another column c.  The columns I want to feed
into my.foo() are all the combinations of columns in y.  So I want to apply
my.foo( y[,1], y[,1] ) and then my.foo( y[,1], y[,2] ), etc...  for all
combinations() of the 10 columns in y.

I would expect the final output to be 10x10x10.  Passing 10 columns by 10
columns to my.foo() which outputs a vector of 10 numbers at a time.

***So in essence, what I am trying to accomplish is like outer(), but
instead of operating on atomic values, I want to operate on columns of y.

I know I can use loops to accomplish this, but I would like to code as
R-like as possible.  I am learning a great deal about "how to think in R"
from the excellent replies on this board.

Thanks in advance for any suggestions.