簡體   English   中英

如何在R中生成這樣的隨機數

[英]How to generate such random numbers in R

我想以以下方式生成雙變量。 我有四個長度相等的列表n 我需要將前兩個列表用作均值列表,將后兩個列表用作方差列表,並生成正態雙變量。

例如n=2 ,我的列表為(1, 2)(3, 4)(5, 6)(7, 8) ,並且我需要c(rnorm(1, mean=1, sd=sqrt(5)), rnorm(1, mean=2, sd=sqrt(6)), rnorm(1, mean=3, sd=sqrt(7)), rnorm(1, mean=4, sd=sqrt(8)),ncol=2)

如何在R中以更實用的方式執行此操作?

這是一種方法:

m <- 1:4
s <- 5:8
rnorm(n = 4, mean = m, sd = s)
[1]  4.599257  1.661132 16.987241  3.418957

之所以起作用,是因為與許多R函數一樣, rnorm()是“向量化的”,這意味着它允許您使用向量作為參數來調用它一次,而不是在遍歷向量元素的循環中多次調用它。

然后,您的主要任務是將您現在擁有參數的“列表”轉換為可以傳遞給rnorm()向量。

注意 :如果您想為每個均值/標准差組合產生多個(比如說3個)隨機變量,則rnorm(n=rep(3,4), mean=m, sd=s)不起作用。 您將必須:(a)重復ms向量的元素,例如rnorm(n=3*4, mean=rep(m, each=3), sd=rep(s, each=3)) ; 或(b)使用mapply()答案中所述的mapply()

我想告訴您,您有一個列表,即Rlist:

plist <- list( a=list(1, 2), b=list(3, 4), c=list(5, 6), d=list(7, 8))
 means <-plist[c("a","b")]  # or you could use means <- plist[1:2]
 vars <- plist[c("c","d")]
 mapply(rnorm, n=rep(1,4), unlist(means), unlist(vars))
#[1]  3.9382147  1.0502025  0.9554021 -7.3591917

您使用了術語雙變量。 您是否真的想要具有特定相關性的x,y對?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM