2013-07-21 11 views
5

Giả sử tôi có một số đối tượng (bất kỳ đối tượng), ví dụ:cư danh sách với cùng một đối tượng một cách hiệu quả

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

Ngoài ra tôi có một số danh sách:

L <- list() 

Tôi muốn L[[1]], L[[2]], L[[3]], ..., L[[100]], ..., L[[1000]] tất cả đều có đối tượng X bên trong nó. Tức là, nếu tôi nhập vào giao diện điều khiển L[[i]], nó sẽ trả lại X, trong đó tôi ở trong {1,2, ..., 1000}.

Làm cách nào để thực hiện điều này một cách hiệu quả mà không dựa vào một số for loop hoặc lapply?

Trả lời

5

Tạo danh sách 1 và sao chép danh sách.

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

Sử dụng replicate ngay cả khi nó vẫn còn là một loại của một giải pháp vòng lặp:

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

EDIT benchmarkking 2 giải pháp:

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 là 5 lần nhanh hơn. Tôi đoán từ replicate sẽ đánh giá biểu thức tại mỗi lần lặp.