2013-08-06 71 views
0

我已經矩陣mR:適用於矩陣利潤率指標

m = matrix(nrow=3, ncol=2) 

和一些功能f

f = function(row_index, col_index) {row_index + col_index} 

如何申請f所有ROW和COL 指數?如果我做apply

apply(m, c(1,2), f) 

然後f用的mNA)值調用,並且我希望它與索引(1,2爲山口和爲1,2,3行)被調用。有了這個例子,我應該得到:

2 3 
3 4 
4 5 

背景:

我想兩個列表元素的所有配對組合比較,所以我的函數看起來更不像是:

f = function(row, col) { 
    length(setdiff(list_a[[col]], list_b[[row]])) 
} 
+0

您是否嘗試應用於所有行和列或列式?如果是後者,使用'MARGIN = 1'。然後,'row_index'和'col_index'分別是矩陣中的第一個和第二個元素。 –

回答

4

如果你的功能是矢量化的,你可以使用rowcol

f(row(m), col(m)) 
# For this example, you can also use: 
row(m) + col(m) 
# [1,] 2 3 
# [2,] 3 4 
# [3,] 4 5 

如果沒有矢量化,你可以用Vectorize向量化它, 但你最終有一個載體,而不是一個矩陣: 你需要重塑的結果。

g <- Vectorize(f) 
matrix(g(row(m), col(m)), nr=nrow(m)) 
+0

爲你的第二個例子+1。row + col - 很好很簡單 –