假设我想模拟来自对数正态分布的10个观测值并重复这100次。我写了一些R代码,但由于某种原因,它不起作用。这里是代码:模拟来自对数正态分布的数据R
for(i in 1:100)
{
x = rlnorm(10, meanlog = 0, sdlog = 1)
}
有什么想法?
假设我想模拟来自对数正态分布的10个观测值并重复这100次。我写了一些R代码,但由于某种原因,它不起作用。这里是代码:模拟来自对数正态分布的数据R
for(i in 1:100)
{
x = rlnorm(10, meanlog = 0, sdlog = 1)
}
有什么想法?
这可能工作:
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)
}
如何计算每10个观察值的平均值和sd?谢谢! – user9292
看我的编辑。注意你也可以在创建100次模拟之后,在第一次创建和提供函数(x)c(mean = mean(x),sd = sd(x))时使用'lapply'。 –
您在每次循环覆盖'x'。你可能想看看'replicate(100,rlnorm(10,meanlog = 0,sdlog = 1))' –
或者更简单的说,'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