[英]How create a multiway matrix in R
我需要進行一千次試驗,每個試驗都會生成一個包含12行7列的矩陣。 如何創建多路矩陣以保持此結果。 謝謝
大概,方便的方法是將矩陣合並到列表中:
A <- matrix(1, ncol=7, nrow=12)
B <- matrix(2, ncol=7, nrow=12)
C <- matrix(3, ncol=7, nrow=12)
mats_list <- list(A, B, C)
這將為您提供一個對象,每個對象的尺寸分別不同,然后每個矩陣中的行/列都不同。 我會說這足以滿足您的需求,但是如果您願意,可以使用array
:
# List to matrix
mat_mat <- array(data = mats_list)
dim(mat_mat)
為了得到:
> dim(mat_mat)
[1] 3
如
> dim(mats_list)
NULL
這就是說,列表將絕對可以存儲和提取結果。
您可以使用數組:
set.seed(2)
x = array(rnorm(1000*12*7), c(1000,12,7))
> dim(x[1,,])
#[1] 12 7
> x[1,,]
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,] -0.89691455 1.4948667 0.4972043 0.19952489 -0.979683918 -0.71217954 0.21510070
# [2,] 0.46620043 -0.7645256 -0.7172315 1.69938645 -1.344280437 0.20653442 -0.91194045
# [3,] -1.89234891 -0.1624283 1.1351026 -1.03220736 0.515821229 -0.10112438 -0.85460968
# [4,] -2.13847638 -0.8206868 0.4083286 0.01454552 1.373745316 -0.02894237 -0.39673381
# [5,] 0.64084454 -1.0644555 -1.2606268 -1.69156964 -0.788296665 1.13059108 0.03310462
# [6,] -1.73081229 0.5706814 -1.2607599 0.16596195 0.001174951 0.55506678 -1.36083280
# [7,] -1.00846517 -0.8213516 1.7968959 1.23328148 -0.682850261 1.14101830 0.84107576
# [8,] 1.02356724 -0.9281833 0.3441365 -0.01183211 -0.649788421 0.08010038 -0.50363132
# [9,] -0.02165721 0.6806610 0.9703106 1.22171432 -1.446446015 1.34022520 -1.41818567
#[10,] 0.77058313 0.5023534 1.1598751 -1.20300804 -0.367739799 -0.95578416 -0.14794308
#[11,] 1.34046771 -1.5331327 0.9604876 -0.40545479 -1.066988497 -0.14925083 -1.01576090
#[12,] -0.60441747 0.1111074 1.8406487 0.19648890 0.503018762 1.01263304 0.42761716
讓我們假設您有一個稱為trial
的函數,該函數生成12x7矩陣。
例如
trial <- function() {
matrix(rnorm(84), nrow = 12)
}
使用基數R,您可以執行以下操作:
trial_array <- replicate(1000, trial())
這將生成一個具有3維的數組或
trial_list <- replicate(1000, trial(), simplify = FALSE)
等效plyr
職能是raply
和rlply
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.