Skip to content

memory in R

3 messages · Raphael Schoenle, Uwe Ligges, Spencer Graves

#
Raphael Schoenle wrote:

            
What do you mean with "assign memory in R"?
You might want to optimize your code...

Uwe Ligges
#
To expand a bit on Uwe's comments:  R is vectorized and loops are 
notoriously inefficient.  Consider the following: 

start.time <- proc.time()
set.seed(1)
X <- array(rnorm(1000), dim=c(100, 10))
X.1 <- apply(X, 2, mean)
print(var(X.1))
(elapsed.time <- proc.time()-start.time)

start.ttime <- proc.time()
set.seed(1)
X <- array(NA, dim=c(100, 10))
for(j in 1:10)for(i in 1:100)X[i,j] <- rnorm(1)
X. <- rep(0, 10)
X.. <- 0
varX <- 0
for(j in 1:10){
    for(i in 1:100)
        (X.[j] <- X.[j]+X[i,j])
    X.[j] <- X.[j]/100   
    X.. <- X..+X.[j]
    varX <- varX+X.[j]^2
}
X.. <- X../10
varX <- (varX-10*X..^2)/9
print(varX)
(elapsed.time2 <- proc.time()-start.time)

elapsed.time
elapsed.time2

# In R 1.8.1: 
 > elapsed.time
[1] 0.00 0.00 0.54   NA   NA
 > elapsed.time2
[1] 0.05 0.00 1.73   NA   NA
 >
# In S-_lus 8.2: 
 > elapsed.time
[1] 0.04 0.00 0.05 0.00 0.00
 > elapsed.time2
[1] 0.37 0.06 0.44 0.00 0.00

      hope this helps.  spencer graves
Uwe Ligges wrote: