2013-07-21 1 views
5

Angenommen, ich habe einen Gegenstand (ein beliebiges Objekt), zum Beispiel:Populate Liste mit demselben Objekt effizient

X <- array(NA,dim=c(2,2)) 

Auch ich habe einige Liste:

L <- list() 

ich L[[1]] will, L[[2]], L[[3]], ..., L[[100]], ..., L[[1000]] alles, um das Objekt X darin zu haben. Das heißt, wenn ich in die Konsole L[[i]] eintippe, wird X zurückgegeben, wobei i in {1,2, ..., 1000} steht.

Wie mache ich das effizient, ohne auf eine for loop oder lapply angewiesen zu sein?

Antwort

5

Erstellen Sie eine Liste von 1 und replizieren Sie sie.

L <- rep(list(x), 1000) 
5

Mit replicate auch wenn es noch eine Art einer Schleife Lösung:

L <- replicate(1000,X,simplify=FALSE) 

EDIT benchmarkking die 2 Lösungen:

X <- array(NA,dim=c(2,2)) 
library(microbenchmark) 
microbenchmark(rep(list(X), 10000), 
       replicate(10000,X,simplify=FALSE)) 

           expr  min  lq median  uq  max neval 
        rep(list(X), 10000) 1.743070 2.114173 3.088678 5.178768 25.62722 100 
replicate(10000, X, simplify = FALSE) 5.977105 7.573593 10.557783 13.647407 80.69774 100 

rep ist 5 mal schneller. Ich denke, seit replicate wird den Ausdruck bei jeder Iteration auswerten.

Verwandte Themen