道歉,如果之前已经处理过,我有点像菜鸟,似乎看不到任何类似的东西。
我想在数据矩阵上运行一个函数,但我希望多次运行该函数,每次删除我的矩阵的不同行,即首先删除第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循环来一次性完成这项工作,但是经过几个小时的撞击砖墙后,我无处可去。
有没有人解决过这个问题?
答案 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