2016-04-06 6 views
4

a ist eine Matrix.Doppelte Matrix zur Formularliste

Ich möchte Matrix "a" 3 mal duplizieren, um eine Liste zu bilden.

Ich habe versucht:

as.list(rep(a,3)) 

, aber es funktioniert nicht. Mein erwartete Ergebnis ist wie folgt:

[[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

auch 'Replikation (3, a, vereinfachen = FALSE)' –

Antwort

4

rep kehrt die gleiche Art die er empfängt, so dass, wenn Sie es ein numerisches passieren Matrix, es wird versuchen, einen numerischen Vektor irgendeiner Art zurückzugeben - nicht eine Liste. Die Lösung ist allerdings, einfach: Wenn Sie eine Liste wollen, geben sie eine Liste:

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

Das ist großartig! So ist es! – lightsnail

2

Vielleicht lapply mit:

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

Benchmarking:

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 
Verwandte Themen