我有矩阵m
:
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
(m
)的值调用NA
,我希望使用索引调用它(对于col为1,2,对于col为1,2,3为行)。通过这个例子,我应该得到:
2 3
3 4
4 5
背景
我想比较两个列表中元素的所有成对组合,所以我的函数看起来更像是这样:
f = function(row, col) {
length(setdiff(list_a[[col]], list_b[[row]]))
}
答案 0 :(得分: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) )