2017-03-21 22 views
1

道歉,如果這已被處理之前,我有點的菜鳥,似乎無法看到任何類似的東西。我想要在一個數據矩陣上運行一個函數,但是我想多次運行這個函數,每次都刪除我的矩陣的不同行,即先刪除第一行,然後刪除第二行(但刪除第二行與第1行存在的),然後用3行刪除(但與行1和行2本)等(R)上以不同的行刪除的每個時間,即功能(基質 - 行1)的矩陣迭代地運行一個函數,函數(基質 - 行2)等

可以說我有十行和10列的矩陣:

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 

但這是緩慢的(我的實際矩陣擁有近10000行)。

我想寫一個for循環一氣呵成要做到這一點,但一對夫婦的敲打我的頭撞牆了幾個小時之後,我越來越行不通。

有沒有人解決了這個?

回答

0

我們可以通過行的序列與sapply做這個循環,然後得到「矩陣」的sum刪除的行索引

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

或者,我們可以在一個矢量做到這一點後,方法用「矩陣」的rowSums減去「矩陣」的sum

unname(sum(matrix) - rowSums(matrix)) 
#[1] 4590 4580 4570 4560 4550 4540 4530 4520 4510 4500 
+1

非常感謝,一個可行的治療! –

相關問題