对于特定情况,R中的outer()函数出错

时间:2014-07-04 09:42:41

标签: r matrix kernlab

我有一个尺寸为942 * 50的矩阵X. 我想用高斯RBF内核创建一个亲和度矩阵。即,对于X矩阵中的每对行,我想计算exp(-sigma * norm(x_i-x_j)^ 2)其中x_i和x_j是X矩阵的行,i,j从1:nrow变化( X)。 我在R中编写代码 下面的R代码会引发错误:

library('kernlab')
rbf <- rbfdot(sigma=15.0563)
func <- function(i,j){return(rbf(X[i,],X[j,]))}
rows <- cols <- 1:nrow(X)
outer(rows,cols,FUN=func)

我收到以下错误: 外部错误(行,列,FUN =有趣):   dims [product 887364]与对象[2500]

的长度不匹配

1 个答案:

答案 0 :(得分:3)

Outer期望一个矢量化函数(见?outer)。因此,您的代码应该是:

library('kernlab')
rbf<-rbfdot(sigma=15.0563)
func<-Vectorize(function(i,j){return(rbf(X[i,],X[j,]))})
rows<-1:nrow(X)
cols<-1:nrow(X)
outer(rows,cols,FUN=func)