2016-04-06 13 views
4

a.Liste matrisi oluşturmak için yinelenen matris

a<-matrix(c(2,2,1,1,1,2,1,2,1,1,2,1,1,1,1,1,1,2,2,2,1,2,1,1),6) 

Liste oluşturmak için matrisi "a" 3 kez çoğaltmak istiyorum.

as.list(rep(a,3)) 

ama çalışmıyor:

denedim. My beklenen sonuç aşağıdaki gibidir: Belki lapply kullanarak

[[1]] 
    [,1] [,2] [,3] [,4] 
[1,] 2 1 1 2 
[2,] 2 2 1 2 
[3,] 1 1 1 1 
[4,] 1 1 1 2 
[5,] 1 2 1 1 
[6,] 2 1 2 1 

[[2]] 
    [,1] [,2] [,3] [,4] 
[1,] 2 1 1 2 
[2,] 2 2 1 2 
[3,] 1 1 1 1 
[4,] 1 1 1 2 
[5,] 1 2 1 1 
[6,] 2 1 2 1 

[[3]] 
    [,1] [,2] [,3] [,4] 
[1,] 2 1 1 2 
[2,] 2 2 1 2 
[3,] 1 1 1 1 
[4,] 1 1 1 2 
[5,] 1 2 1 1 
[6,] 2 1 2 1 
+4

'kopyalayan (3, bir, = YANLIŞ basitleştirmek)' –

cevap

4

rep döner bunu sayısal bir geçirirseniz bu yüzden, aldığı aynı tip matris, bir liste değil, bir çeşit sayısal bir vektör döndürmeye çalışacak. Çözelti olsa da, basit:

Ayrıca
rep(list(a), 3) 
# [[1]] 
#  [,1] [,2] [,3] [,4] 
# [1,] 2 1 1 2 
# [2,] 2 2 1 2 
# [3,] 1 1 1 1 
# [4,] 1 1 1 2 
# [5,] 1 2 1 1 
# [6,] 2 1 2 1 
# 
# [[2]] 
#  [,1] [,2] [,3] [,4] 
# [1,] 2 1 1 2 
# [2,] 2 2 1 2 
# [3,] 1 1 1 1 
# [4,] 1 1 1 2 
# [5,] 1 2 1 1 
# [6,] 2 1 2 1 
# 
# [[3]] 
#  [,1] [,2] [,3] [,4] 
# [1,] 2 1 1 2 
# [2,] 2 2 1 2 
# [3,] 1 1 1 1 
# [4,] 1 1 1 2 
# [5,] 1 2 1 1 
# [6,] 2 1 2 1 
+0

harika: Bir liste istiyorsanız, bunu bir liste geçmektedir! İşte bu! – lightsnail

2

:

lapply(1:3, function(i) a) 

Kıyaslama:

library(microbenchmark) 

a <- matrix(c(2,2,1,1,1,2,1,2,1,1,2,1,1,1,1,1,1,2,2,2,1,2,1,1),6) 

microbenchmark(
    replicate(3, a, simplify = FALSE), 
    rep(list(a), 3), 
    lapply(1:3, function(i) a), 
    times = 10000) 


# Unit: nanoseconds 
#        expr min lq  mean median uq  max neval cld 
# replicate(3, a, simplify = FALSE) 5987 7127 8044.9371 7413 7983 1150921 10000 c 
#     rep(list(a), 3) 0 285 396.2066 285 570 15395 10000 a 
#   lapply(1:3, function(i) a) 1995 2566 3013.6994 2851 3136 1290902 10000 b 
İlgili konular