我对使用R中的列表函数不是很熟悉。这是我第一次使用矩阵列表。我正在尝试从矩阵列表中的每个矩阵中删除相同的列,但不确定如何将其与R中的索引一起使用。
现在,我在列表中有8个矩阵。每个矩阵为[120,56]。我想从每个矩阵中删除第17-40和49-56行。因此,我最终得到[120,24]的8个矩阵的列表。
这是我拥有的矩阵列表的示例:
MatrixList <- list(maxT = matrix(1:56, 120, 56, byrow = TRUE),
minT = matrix(1:56, 120, 56, byrow = TRUE),
meanT = matrix(1:56, 120, 56, byrow = TRUE),
rain24 = matrix(1:56, 120, 56, byrow = TRUE),
rain5d = matrix(1:56, 120, 56, byrow = TRUE),
maxT2 = matrix(1:56, 120, 56, byrow = TRUE),
minT2 = matrix(1:56, 120, 56, byrow = TRUE),
meanT2 = matrix(1:56, 120, 56, byrow = TRUE))
我知道这似乎是一个简单的问题,但是我是一个新手,只是不确定如何使用for循环和内部索引的组合来删除列。我宁愿学习如何有效地执行此操作,而不是分别对每个矩阵进行处理,然后创建列表。
任何帮助,将不胜感激。谢谢!
最佳答案
通常,@ DWin早早得到了一个很好的答案。这是我的简单主意更容易理解的替代方法。
您可以使用lapply
遍历列表,然后使用[
运算符进行标准子设置。
与其使用[
运算符作为函数(如@DWin建议),我更喜欢在lapply
内编写一个匿名函数,该函数看起来与转换列表中单个元素(即对单个矩阵进行子集化)所执行的操作完全相同:
mls <- lapply(MatrixList, function(x)x[-c(17:40, 49:56), ])
str(mls)
List of 8
$ maxT : int [1:88, 1:56] 1 1 1 1 1 1 1 1 1 1 ...
$ minT : int [1:88, 1:56] 1 1 1 1 1 1 1 1 1 1 ...
$ meanT : int [1:88, 1:56] 1 1 1 1 1 1 1 1 1 1 ...
$ rain24: int [1:88, 1:56] 1 1 1 1 1 1 1 1 1 1 ...
$ rain5d: int [1:88, 1:56] 1 1 1 1 1 1 1 1 1 1 ...
$ maxT2 : int [1:88, 1:56] 1 1 1 1 1 1 1 1 1 1 ...
$ minT2 : int [1:88, 1:56] 1 1 1 1 1 1 1 1 1 1 ...
$ meanT2: int [1:88, 1:56] 1 1 1 1 1 1 1 1 1 1 ...
关于r - 如何从R中的矩阵列表中的每个矩阵中删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271544/