通过将函数应用于所有对来生成矩阵

时间:2017-04-11 16:27:32

标签: r

F成为一个带两个参数并返回数值的函数,让XY成为适合作为{的第一和第二个参数的值的向量{1}}。

是否有“功能”(即无环路),方便的方式来生成 ij -th条目为数字的矩阵

F

在Python中,我会这样做:

F(X[[i]], Y[[j]])

在Mathematica中,

[[F(x, y) for y in Y] for x in X]

R中是否有同样简单的东西?

更新:关于Table[F[x, y], {x, X}, {y, Y}]

outer

这个> F <- function (c1, c2) utf8ToInt(c1) - utf8ToInt(c2) 只是说明我的观点的一个愚蠢的例子。它在单独使用时有效:

F

可是:

> F('A', 'a')
[1] -32

我再说一遍,以上只是一个人为的例子,只是为了说明我的观点而炮制。 (因此,让它以非一般化的方式工作对我来说毫无用处。)

2 个答案:

答案 0 :(得分:1)

矢量化F,以便您可以将其与outer一起使用或执行以下操作

sapply(c('A', 'B', 'C', 'D', 'E'), function(a)
           sapply(c('a', 'b', 'c', 'd', 'e'), function(b)
                     F(a,b)))
#    A   B   C   D   E
#a -32 -31 -30 -29 -28
#b -33 -32 -31 -30 -29
#c -34 -33 -32 -31 -30
#d -35 -34 -33 -32 -31
#e -36 -35 -34 -33 -32

答案 1 :(得分:1)

根据outer的帮助,F需要被矢量化......

F <- Vectorize(function (c1, c2) utf8ToInt(c1) - utf8ToInt(c2))
outer(c('A', 'B', 'C', 'D', 'E'), c('a', 'b', 'c', 'd', 'e'), F)