在R中建立协方差矩阵

在R中建立协方差矩阵,r,R,我使用两个for循环来建立R中的协方差矩阵。在每两个数据点之间有两个数据向量和一个协方差函数f(x)。我的代码如下: r12=function(x1,x2,H){ ra12= matrix(0,length(x1),length(x2)) for (i in 1:nrow(ra12)) { for (j in 1:ncol(ra12)) { raed12[i,j]=fx(x1[i]-x2[j],H) } } return(raed12)

我使用两个for循环来建立R中的协方差矩阵。在每两个数据点之间有两个数据向量和一个协方差函数f(x)。我的代码如下:

r12=function(x1,x2,H){
  ra12= matrix(0,length(x1),length(x2))
  for (i in 1:nrow(ra12)) 
  {
    for (j in 1:ncol(ra12)) 
    {
      raed12[i,j]=fx(x1[i]-x2[j],H)
    }
  }
  return(raed12)
}
如何使此代码更快?

考虑一个
sapply()
解决方案,假设
fx()
是矢量化的:

r12 <- function(x1,x2,H){
          return(fx(x1-x2,H))
       }
mat <- sapply(vector1, r12, vector2, H)

r12对于初学者,如何更改内部For循环,以便只计算协方差矩阵的下三角或上三角?是否已将
fx
矢量化?如果是这样,您的代码看起来就像是计算外部产品的右手。参见
outer
@MarkL.Stone的帮助,我最初将此作为一个答案,但我认为有两个不同的向量,即当x1!=x2.我真的非常感谢你,你真的为我节省了很多时间。我似乎不需要对函数进行矢量化,而且当我对它进行矢量化时会出现错误,你能解释一下吗?