假設我想模擬來自對數正態分佈的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