簡體   English   中英

R編程 - 如何創建具有不同長度的向量的二維數組

[英]R programming - How to create a 2 dimensional array of vectors which are of different lengths

我是R編程語言的新手,我很難找到正確的數據類型。

你如何創建一個向量矩陣? 也許更好的方式來描述這將是具有不同長度的矢量的二維陣列。 這就是我想要做的:

    A = c(1, 2, 3, 4)
    B = c(5, 6, 7)

    C = c(10, 11, 12, 13)
    D = c(14, 15, 16)

    E = c(21, 22, 23, 24)
    F = c(25, 26, 27)

    mat = matrix(nrow=3, ncol=2)

    #This code does not work, but it may give you the gist of what I'm trying to do
    mat[1, 1] = A
    mat[1, 2] = B
    mat[2, 1] = C
    mat[2, 2] = D
    mat[3, 1] = E
    mat[3, 2] = F

我想得到以下內容:

            [,1]         [,2]
    [1,]   1 2 3 4       5 6 7
    [2,]   10 11 12 13   14 15 16
    [3,]   21 22 23 24   25 26 27

我確定這是因為我使用了錯誤的數據類型,但我找不到合適的數據類型。 我已經嘗試了列表,數組和數據框架,但它們似乎都不完全符合我的目的。 謝謝你的幫助!

你可以制作一個列表矩陣。 那看起來像

mat<-matrix(list(), nrow=3, ncol=2)
mat[[1,1]] <- c(1, 2, 3, 4)
mat[[1,2]] <- c(5, 6, 7)
mat[[2,1]] <- c(10, 11, 12, 13)
mat[[2,2]] <- c(14, 15, 16)
mat[[3,1]] <- c(21, 22, 23, 24)
mat[[3,2]] <- c(25, 26, 27)

請注意,與標准矩陣不同,此處必須使用雙括號來提取單元格。 此外,它們可能不一定按照您對矩陣的標准函數的預期方式工作。

我同意MrFlick認為這似乎很苛刻,但我已經做了類似的事情。 我想知道是否有任何規律可以讓你做一個更緊湊的結構。

 A = list(c(1, 2, 3, 4))
     B = list(c(5, 6, 7))

     C = list(c(10, 11, 12, 13))
     D = list(c(14, 15, 16))

     E = list(c(21, 22, 23, 24))
     F = list(c(25, 26, 27))

     mat = matrix(list(), nrow=3, ncol=2)
     mat[1, 1] = A
     mat[1, 2] = B
     mat[2, 1] = C
     mat[2, 2] = D
     mat[3, 1] = E
     mat[3, 2] = F
 mat
    [,1]      [,2]     
[1,] Numeric,4 Numeric,3
[2,] Numeric,4 Numeric,3
[3,] Numeric,4 Numeric,3
 mat[1,1]
[[1]]
1] 1 2 3 4

如果矩陣中的所有列都具有相同的長度,則可能更容易使用(並顯示)兩個矩陣的列表。

 mlist <- list(fours = do.call(rbind, mat[,1]),
                threes= do.call(rbind, mat[,2]) )
 mlist
# -----------
$fours
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]   10   11   12   13
[3,]   21   22   23   24

$threes
     [,1] [,2] [,3]
[1,]    5    6    7
[2,]   14   15   16
[3,]   25   26   27

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM