[R] Using vectorization instead of for loop for performing a calculation efficiently
pwilkinson at videotron.ca
Fri Apr 7 05:51:44 CEST 2006
Ok so I feel silly now ... I think I need to get a more thorough text and
work through some examples. 'replace' does what I was trying to do manually.
Thanks for the tip, this really is MUCH faster.
From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com]
Sent: Saturday, April 01, 2006 7:58 PM
To: Peter Wilkinson
Cc: r-help at stat.math.ethz.ch
Subject: Re: [R] Using vectorization instead of for loop for performing a
> mat <- matrix(rnorm(20000 * 10), 20000)
> system.time(mat2 <- replace(mat, rowSums(mat > 0) == 10, NA))
 0.04 0.01 0.05 NA NA
> R.version.string # Windows XP
 "R version 2.2.1, 2005-12-20"
On 4/1/06, Peter Wilkinson <pwilkinson at videotron.ca> wrote:
> I am trying to write an efficient function that will do the following:
> Given an nxm matrix, 10 rows (observations) by 10 columns (samples)
> for each row, test of all values in the row are greater than a value k
> If all values are greater than k, then set all values to NA (or
> something), Return an nxm matrix with the modified rows.
> If I do this with a matrix of 20,000 rows, I will be waiting until
> Christmas for it to finish:
> For rows in Matrix:
> if rows < filter
> set all elements in rows to NA (or something)
> do nothing
> Return the matrix with the modified rows
> I don't know how to code this properly. The following:
> If (sum(ifelse(nvector>filter,1,0) == 0 ) )
> Tells me if any row has at least 1 value above the filter. How do I
> get rid of the 'outer' loop?
> Peter Wilkinson
> Senior Bioinformatician / Programmer-Analyst National Immune
> Monitoring Laboratory
> tel: (514)-343-7876
> R-help at stat.math.ethz.ch mailing list
> PLEASE do read the posting guide!
More information about the R-help