r - 如何从R中的矩阵列表中的每个矩阵中删除列?

标签 r list matrix indexing

我对使用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/

相关文章:

r - 循环线性回归和节省系数

r - 如何正确为 r 代码创建 exe

list - 扁平化列表

从 R 中的矩阵中删除行名列表

java - 来自java中不同类的对象矩阵

r - 如果列 1 名称 == 来自列 2 BY GROUP 的第一个(值),则有条件地从列 1 获取值

python - 绘制一起玩的时间百分比

python - 比较两个列表的有效方法,记住每个唯一元素的来源

java - 在 Java 中是否有更优雅的处理列表的方法? (Python 与 Java)

python - 计算NumPy坐标数组之间距离的三角矩阵