R制作逻辑矩阵矩阵

时间:2012-10-23 21:42:41

标签: r

我一直在尝试制作一个在每列中都有逻辑矩阵的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矩阵。

2 个答案:

答案 0 :(得分: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)

等等。
但我猜你用更高维的矩阵而不是像那样的结构会更开心。

答案 1 :(得分: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 ...

或者,你可以制作一个三维数组:

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's answer上构建,您可以创建一个列表,其中每个元素都是一个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到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

不知道你为什么要这样做。

相关问题