2013-08-06 9 views
0

я матрица m:R: применяются к наценки индексов матрицы

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

и некоторые функции f:

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

Как применять f ко всем строкам и цв индексы? Если я apply:

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

затем f вызывается со значениями m (NA), и я хочу, чтобы ссылаться с индексами (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

Если ваша функция векторизована, вы можете использовать row и col.

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 - приятный и простой –

Смежные вопросы