R中的多个多元法线适用

时间:2014-09-23 19:08:43

标签: r apply

所以,我试图用不同的方法从多元正态分布中生成随机数。我也试图使用apply函数而不是for循环,这是问题发生的地方。这是我的代码:

library(MASS)
set.seed(123)

# X and Y means
Means<-cbind(c(.2,.2,.8),c(.2,.6,.8))
Means
Sigma<-matrix(c(.01,0,0,.01),nrow=2)
Sigma

data<-apply(X=Means,MARGIN=1,FUN=mvrnorm,n=10,Sigma=Sigma)
data

我得到三个向量,其中X和Y点堆叠,而不是得到两个带X和Y点的向量。获得这两个向量的最佳方法是什么?我知道我可以手动取出它们,但我觉得R应该有一些光滑的方式来完成这个。

2 个答案:

答案 0 :(得分:0)

尝试:

 set.seed(42)
 res1 <- lapply(seq_len(nrow(Means)), function(i) mvrnorm(Means[i,], n=10, Sigma))

检查apply

的结果
 set.seed(42)
 res2 <- apply(X=Means,MARGIN=1,FUN=mvrnorm,n=10,Sigma=Sigma)
 dim(res2) <- c(10,2, 3)
 res3 <-lapply(1:dim(res2)[3], function(i) res2[,,i])
 all.equal(res3, res1, check.attributes=FALSE)
 #[1] TRUE

答案 1 :(得分:0)

我不确定这是不是我会打电话给他们的#s; slick&#39;但如果你真的想使用apply(而不是前面提到的lapply),你可以强制apply将结果作为矩阵列表返回。然后,这只是将结果粘在一起的问题。我希望这比尝试重建两个列矩阵更不容易出错。

data <- apply(Means, 1, function(x) {
    list(mvrnorm(n=10, mu=x, Sigma=Sigma))
})
data <- do.call('rbind', unlist(data, recursive=FALSE))