这是一个玩具示例,我试图使用外部,但它不起作用。
A=matrix(1:4,2,2)
B=matrix(1:8,2,4)
g=function(i,j) as.vector(t(A[i,]-B[i,c(j,2+j)])%*%(A[i,]-B[i,c(j,2+j)]))
g(1,2)
[1] 20
g(1,1)
[1] 4
g(2,1)
[1] 4
g(2,2)
[1] 20
outer(1:2,1:2,g)
Error in A[i, ] - B[i, c(j, 2 + j)] : non-conformable arrays
在我的实际数据中,A和B都有很大的尺寸,因此使用for循环或mapply非常慢。有没有办法使用外部来获得结果?
答案 0 :(得分:2)
你可以编写一个辅助函数来使用mapply
的枚举容量来传递expand.grid
实现中的值,所有这些都是mh n x m组合:
> gh=function(df) mapply( g, df[,1], df[,2])
> gh(expand.grid(1:2,1:2))
[1] 4 4 20 20
排序将是第一列中的所有行,然后是第二列中的所有行,然后是......