2012-12-27 108 views
0

假设我想模拟来自对数正态分布的10个观测值并重复这100次。我写了一些R代码,但由于某种原因,它不起作用。这里是代码:模拟来自对数正态分布的数据R

for(i in 1:100) 
{ 

x = rlnorm(10, meanlog = 0, sdlog = 1) 

} 

有什么想法?

+1

您在每次循环覆盖'x'。你可能想看看'replicate(100,rlnorm(10,meanlog = 0,sdlog = 1))' –

+0

或者更简单的说,'x < - matrix(rlnorm(1000,m = 0,s = 1),nrow = 100)'。然后,可以用'rowMeans(x)'得到样本均值的向量,并且可以用'apply(m,1,sd)'来获得标准偏差向量。如果你想把它们绑定在一起,'DF < - data.frame(mean = rowMeans(x),sd = apply(m,1,sd))'。 – Dennis

回答

3

这可能工作:

lapply(1:100, function(i) rlnorm(10, meanlog = 0, sdlog = 1)) 

编辑
计算平均值和SD使用:

lapply(1:100, function(i) { 
    x <- rlnorm(10, meanlog = 0, sdlog = 1) 
    c(mean=mean(x), sd=sd(x)) 
}) 

或者将其以矩阵形式返回(使用do.call):

do.call(rbind, lapply(1:100, function(i) { 
    x <- rlnorm(10, meanlog = 0, sdlog = 1) 
    c(mean=mean(x), sd=sd(x)) 
})) 

而且还使原来的代码工作(见迪文注)使用方法:

x <- list() 
for(i in 1:100) { 
    x[[i]] <- rlnorm(10, meanlog = 0, sdlog = 1) 
} 
+0

如何计算每10个观察值的平均值和sd?谢谢! – user9292

+0

看我的编辑。注意你也可以在创建100次模拟之后,在第一次创建和提供函数(x)c(mean = mean(x),sd = sd(x))时使用'lapply'。 –