簡體   English   中英

R遍歷多個矩陣

[英]R loop over multiple matrices

我有472個矩陣,每個矩陣有405列(matrix1,...,matrix400),並且想擁有472個新矩陣,而該矩陣只有前244列。 我怎樣才能做到這一點? 我試過了:

for (i in 1:472) {
assign(paste("new_matrix",i,sep=""), matrix[[i]][,c(1:244)])
}

我通過用一個標識符(對於組)將一個數據幀拆分來創建矩陣:

for (i in 1:472){
   assign(paste("matrix", i, sep=""), subset(data, ID==i))
}

不知何故,我無法對每個矩陣說話,但是我不知道如何做到這一點。

您顯然應該采用其他方法。 分配所有單個矩陣不是一個好方法。 但是這是您可以做到的一種方法...

mat1 <- matrix(1:6, 2, 3)
mat2 <- matrix(2:7, 2, 3)

example_func <- function(mati) {

  mat_name <- as.name(paste0("mat", mati))
  bquote(.(mat_name) <- .(mat_name)[ , 1:2])

}

for (i in 1:2) eval(example_func(i))

但是,使用eval可能會很復雜,因為您必須非常注意環境,尤其是在函數內部使用時。 作為示例,請嘗試運行lapply(1:2, function(x) eval(example_func(x)))而不是使用for循環,並查看結果之間的差異。

要采用更好的方法,請看?split

some_data <- data.frame(ID = rep(1:4, each = 4),
                        V1 = 1:16,
                        v2 = letters[1:16])

split(some_data, list(some_data$ID))

然后,您可以使用lapply遍歷子集並進一步迭代子集。 或者,更好的是,僅將原始data.frame子集化為所需的列,然后使用split

matrix1 <- matrix(1:25, 5,5)
matrix2 <- matrix(26:50, 5,5)

假設我想對上述矩陣的前3列進行子集化,

list2env(
   setNames(
          lapply(mget(ls(pattern="matrix")), `[`, ,1:3),
                  paste("new", ls(pattern="matrix"),sep="_")), 
                                               envir=.GlobalEnv)

  new_matrix1
  #     [,1] [,2] [,3]
  #[1,]    1    6   11
  #[2,]    2    7   12
  #[3,]    3    8   13
  #[4,]    4    9   14
  #[5,]    5   10   15

  new_matrix2
  #      [,1] [,2] [,3]
  # [1,]   26   31   36
  # [2,]   27   32   37
  # [3,]   28   33   38
  # [4,]   29   34   39
  # [5,]   30   35   40
  • ls(pattern="matrix")將輸出[1] "matrix1" "matrix2"
  • mget獲取以列表形式存儲在上述矩陣中的值
  • 使用lapply(..., [ ,1:3) [ ,1:3)
  • 通過使用setNamesmatrix1matrix2更改列表元素的名稱並paste
  • 使用list2env創建新對象new_matrix1new_matrix2 但是,在您的情況下,這將在全局環境中創建472個new_matrices 我希望將列表中的矩陣子集化,以執行列表中的所有必要計算。 然后,您可以使用來自library(MASS) write.tablewrite.matrix將列表元素寫入文件。

如果從數據框開始

這是如何以矩陣列表結尾的,該列表按組(並具有名稱)和所需的行數進行划分:

library("ddply")
dlply(iris, .(Species), function(x) x[1:10,])

iris是您使用R為底的虛擬數據框; 物種是您的因素組

暫無
暫無

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

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