[英]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)重復m
和s
向量的元素,例如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.