2

我一直在尝试制作一个每列都有逻辑矩阵的 1 行矩阵,但运气不佳。我尝试了一个 for 循环:

mat<-matrix(NULL,nrow=1,ncol=60)
for(i in 1:60){mat<-list(mat,matrix(FALSE,nrow=4,ncol=4))}

这产生了一个带有奇怪大小的子矩阵的 4x4 矩阵。

mat<-matrix(NULL,n=row=1,ncol=60)
for(i in 1:60){mat[i]<-matrix(FALSE,nrow=4,ncol=4)}

这产生了一个具有 60 个 FALSE 的 NULLxNULL 矩阵。

4

2 回答 2

0

矩阵本质上是二维的。您可以制作一个 data.frame,其中每列都是一个 4x4 矩阵:

tmp <- data.frame(V1=logical(4))
for (i in 1:60) tmp[i] <- matrix(FALSE, nrow=4, ncol=4)

(这是制作 data.frame 的一种尴尬方式,因为 data.frames 倾向于将矩阵的列分散到不同的列中)。

> str(tmp)
'data.frame':   4 obs. of  60 variables:
 $ V1 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V2 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V3 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V4 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V5 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V6 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V7 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V8 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V9 : logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V10: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V11: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V12: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V13: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V14: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V15: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V16: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V17: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V18: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V19: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V20: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V21: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V22: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V23: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V24: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V25: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V26: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V27: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V28: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V29: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V30: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V31: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V32: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V33: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V34: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V35: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V36: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V37: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V38: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V39: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V40: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V41: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V42: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V43: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V44: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V45: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V46: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V47: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V48: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V49: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V50: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V51: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V52: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V53: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V54: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V55: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V56: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V57: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V58: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V59: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ V60: logi [1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...

或者,您可以制作一个 3 维数组:

tmp <- array(FALSE, dim=c(60,4,4))

对第一维进行索引给出了一个 4x4 矩阵:

> str(tmp)
 logi [1:60, 1:4, 1:4] FALSE FALSE FALSE FALSE FALSE FALSE ...
> tmp[1,,]
      [,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE

我认为后者可能更接近对你有用的东西,但不知道你为什么想要那个特定的数据结构,很难说。

基于Carl 的回答,您可以创建一个列表,其中的每个元素都是一个 4x4 逻辑矩阵:

tmp <- rep(list(matrix(FALSE, nrow=4, ncol=4)), 60)

> tmp[[1]]
      [,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE

如果您真的希望这是一个 1 x 60 结构,其中每个元素都是一个 4x4 逻辑矩阵,那么您也可以向列表中添加维度:

tmp <- rep(list(matrix(FALSE, nrow=4, ncol=4)), 60)
dim(tmp) <- c(1,60)

可以像这样访问:

> tmp[[1,3]]
      [,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE
> tmp
     [,1]       [,2]       [,3]       [,4]       [,5]       [,6]      
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,7]       [,8]       [,9]       [,10]      [,11]      [,12]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,13]      [,14]      [,15]      [,16]      [,17]      [,18]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,19]      [,20]      [,21]      [,22]      [,23]      [,24]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,25]      [,26]      [,27]      [,28]      [,29]      [,30]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,31]      [,32]      [,33]      [,34]      [,35]      [,36]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,37]      [,38]      [,39]      [,40]      [,41]      [,42]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,43]      [,44]      [,45]      [,46]      [,47]      [,48]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,49]      [,50]      [,51]      [,52]      [,53]      [,54]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16
     [,55]      [,56]      [,57]      [,58]      [,59]      [,60]     
[1,] Logical,16 Logical,16 Logical,16 Logical,16 Logical,16 Logical,16

不过,不确定您为什么要这样做。

于 2012-10-23T21:54:16.483 回答
0

R 中的矩阵是严格定义的元素数组。您可能想要一个结构,或者更简单地说,一个list变量。

foo<- list() 
foo[1:4]<-1:4  #creates four elements in list variable. Short example; you'd use 1:60
foo[[1]]<- matrix(rep(TRUE,16),nr=4)

等等。
但我猜你会更喜欢更高维度的矩阵而不是这样的结构。

于 2012-10-23T21:49:58.447 回答