(r)在矩阵上迭代运行一个函数,每次删除不同的行,即函数(矩阵 - 第1行),函数(矩阵 - 第2行)等

时间:2017-03-21 15:48:57

标签: r function for-loop matrix

道歉,如果之前已经处理过,我有点像菜鸟,似乎看不到任何类似的东西。

我想在数据矩阵上运行一个函数,但我希望多次运行该函数,每次删除我的矩阵的不同行,即首先删除第1行,然后删除第2行(但是存在第1行),然后删除第3行(但存在第1行和第2行)等。

示例

假设我有一个十行十列的矩阵:

matrix <- matrix(1:100, nrow=10, ncol=10)
row.names(matrix) <- c(1:10)

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
1     1   11   21   31   41   51   61   71   81    91
2     2   12   22   32   42   52   62   72   82    92
3     3   13   23   33   43   53   63   73   83    93
4     4   14   24   34   44   54   64   74   84    94
5     5   15   25   35   45   55   65   75   85    95
6     6   16   26   36   46   56   66   76   86    96
7     7   17   27   37   47   57   67   77   87    97
8     8   18   28   38   48   58   68   78   88    98
9     9   19   29   39   49   59   69   79   89    99
10   10   20   30   40   50   60   70   80   90   100

并且假设我想将矩阵的总和取10次,每次删除不同的行。

我可以通过以下方式手动执行此操作:

sum(matrix[-1,])
sum(matrix[-2,])
sum(matrix[-3,])
sum(matrix[-4,])
etc

但这很慢(我的实际矩阵有近10,000行)。

我正在尝试写一个for循环来一次性完成这项工作,但是经过几个小时的撞击砖墙后,我无处可去。

有没有人解决过这个问题?

1 个答案:

答案 0 :(得分:0)

我们可以使用sapply来循环执行行序列,然后在删除行索引后获取'矩阵'的sum

sapply(seq_len(nrow(matrix)), function(i) sum(matrix[-i,]))
#[1] 4590 4580 4570 4560 4550 4540 4530 4520 4510 4500

或者我们可以通过使用'{1}}'矩阵'减去'{1}}'矩阵'来以矢量化方式执行此操作

sum