所以,我试图用不同的方法从多元正态分布中生成随机数。我也试图使用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应该有一些光滑的方式来完成这个。
答案 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))