gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:33:49 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com