[R] efficient way to fill up matrix (and evaluate function)

Joshua Wiley jwiley.psych at gmail.com
Mon Nov 28 05:25:57 CET 2011

Hi Sachin,

The technique you are suggesting is likely to be just as efficient as
any other if indeed myfunc must be called on each x[i] x[j] element
individually.  I would take the additional steps of instantiating A as
a matrix (something like:

A <- matrix(0, nrow = n, ncol = n)

Depending, you may also squeeze a bit more performance out by doing
something like:

f <- function(x) {
  n <- length(x)
  A <- matrix(0, nrow = n, ncol = n)
  for (i in 1:n){
    for (j in 1:n){
       A[i,j]<-myfunc(x[i], x[j])

f <- cmpfun(f)

A <- f(x)

However, any big performance increases (if possible) are likely to
come via vectorizing myfunc so that it can operate on say,
myfunc(x[1], x).  If you post the code to myfunc, we may be able to
help improve its performance or rework it so that it can handle x as a
vector rather than element by element.



On Sun, Nov 27, 2011 at 8:16 PM, Sachinthaka Abeywardana
<sachin.abeywardana at gmail.com> wrote:
> Hi All,
> I want to do something along the lines of:
> for (i in 1:n){
>    for (j in 1:n){
>        A[i,j]<-myfunc(x[i], x[j])
>    }
> }
> The question is what would be the most efficient way of doing this. Would
> using functions such as sapply be more efficient that using a for loop?
> Note that n can be a few thousand. Thus atleast a 1000x1000 matrix.
> Thanks,
> Sachin
>        [[alternative HTML version deleted]]
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

Joshua Wiley
Ph.D. Student, Health Psychology
Programmer Analyst II, ATS Statistical Consulting Group
University of California, Los Angeles

More information about the R-help mailing list