2016-04-06 19 views
4

は行列です。リストを形成する重複行列

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) 

マトリックス "a"を3回複製してリストを作成したいとします。

私が試してみました:

as.list(rep(a,3)) 
を、それは動作しません。 私の期待される結果は以下のとおりである:たぶんlapply使用

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

また '複製(3、FALSE =簡素化)' –

答えて

4

rep戻りますが、それを数値で渡すので、もしそれが、受信した同じタイプを行列では、リストではなく、ある種の数値ベクトルを返そうとします。解決策は、しかし、単純です:素晴らしい

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

:あなたはリストをしたい場合は、リストを渡します!そうです! – lightsnail

2

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

ベンチマーク:

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 
関連する問題