[R] Function modification: how to calculate values for every combination?

Paul Smith phhs80 at gmail.com
Sun Sep 2 13:16:59 CEST 2007


On 9/2/07, Paul Smith <phhs80 at gmail.com> wrote:
> > I have a function like this:
> >
> > fun <- function (x, y) {
> >           a <- log(10)*y
> >           b <- log(15)*x
> >           extr <- a-b
> >           extr
> >           }
> >
> > fun(2,3)
> > [1] 1.491655
> >
> > x <- c(1,2,3)
> > y <- c(4,5,6)
> > fun(x, y)
> > [1] 6.502290 6.096825 5.691360
> >
> > How do I have to modify my function that I can calculate results using
> > every combination of x and y? I would like to produce a matrix which
> > includes the calculated values in every cell and names(x) and names(y)
> > as row and column headers respectively. Is the outer-function a way to
> > solution?
>
> Try the following code and adapt it to fill the matrix:
>
> fun <- function (x, y) {
>          a <- log(10)*y
>          b <- log(15)*x
>          extr <- a-b
>          extr
> }
>
> x <- c(1,2,3)
> y <- c(4,5,6)
>
> combs <- expand.grid(x,y)
>
> for (i in 1:nrow(combs))
>   cat(fun(combs[i,1],combs[i,2]),"\n")

The complete code can be:

fun <- function (x, y) {
         a <- log(10)*y
         b <- log(15)*x
         extr <- a-b
         extr
}

x <- c(1,2,3)
y <- c(4,5,6)

combs <- expand.grid(x,y)

a <- vector()

for (i in 1:nrow(combs))
  a[i] <- fun(combs[i,1],combs[i,2])

m <- matrix(a,3,3)
rownames(m) <- x
colnames(m) <- y

m

Paul



More information about the R-help mailing list