且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

向R中的矩阵列表中的每个矩阵添加新列

更新时间:2022-06-10 07:17:23

如果我正确理解,在创建正确尺寸的空矩阵后,简单的cbind应该可以工作:

If I understand correctly, a simple cbind should work after creating an empty matrix of the correct dimensions:

样本输入:

L <- list(matrix(1:3, ncol = 1, dimnames = list(NULL, "a")),
          matrix(1:5, ncol = 1, dimnames = list(NULL, "b")))
L
# [[1]]
#      a
# [1,] 1
# [2,] 2
# [3,] 3
# 
# [[2]]
#      b
# [1,] 1
# [2,] 2
# [3,] 3
# [4,] 4
# [5,] 5

您要添加的新列:

newcols <- c("ID", "LU_1990", "CHLU_90_00", "LU_2005", "CHLU_00_05",
             "Tile", "UNIQ_ID", "AREA", "Sour_90_00", "Sour_00_05")

使用lapply循环浏览列表,将相关的空列添加到每个列表项.

Use lapply to cycle through the list, adding the relevant empty columns to each list item.

myNewList <- lapply(L, function(x) {
  M <- matrix(NA, nrow = nrow(x), ncol = 10, dimnames = list(NULL, newcols))
  cbind(x, M)
})

myNewList
# [[1]]
#      a ID LU_1990 CHLU_90_00 LU_2005 CHLU_00_05 Tile UNIQ_ID AREA Sour_90_00 Sour_00_05
# [1,] 1 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [2,] 2 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [3,] 3 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# 
# [[2]]
#      b ID LU_1990 CHLU_90_00 LU_2005 CHLU_00_05 Tile UNIQ_ID AREA Sour_90_00 Sour_00_05
# [1,] 1 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [2,] 2 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [3,] 3 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [4,] 4 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [5,] 5 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA