我想我有一个简单的问题,在我的实际问题中,有时我的循环得到了一个非 "正定 "矩阵,然后我不能从正态分布中生成随机值,使用这个矩阵作为Scale参数。所以,我很苦恼如何才能再次计算,直到我得到一个 "正定 "的矩阵。我做了一个简单的例子,可以帮助你。
test = function(a){
b = rnorm(1) + a
c = b - .5
return(c)
}
replicate(20,test(.5))
[1] 0.93297282 1.17247501 -0.06919809 0.71069048 -0.12760964 1.46818526 -1.34637900 0.85637634 -0.03191685
[10] 0.24198938 0.26555849 -0.47910932 0.11841441 1.92971628 -1.23540504 -0.07653842 -0.08895779 1.32780821
[19] -0.03604193 0.13845360
假设我希望 "c "是正数 每当 "c "是负数时 我希望 "b "能再次生成 我知道我们可以截断,但在我的实际情况下,我需要返回并再次生成变量'b',直到我有20个'c'的正值。
有什么提示可以告诉我如何做到这一点吗?
你可以使用 repeat
循环和 break
它 c >= 0
.
test <- function(a) {
repeat({
b <- rnorm(1) + a
c <- b - .5
if (c >= 0) break
})
return(c)
}
set.seed(42)
replicate(20, test(.5))
# [1] 1.37095845 0.36312841 0.63286260 0.40426832 1.51152200 2.01842371
# [7] 1.30486965 2.28664539 0.63595040 1.32011335 1.21467470 1.89519346
# [13] 0.46009735 0.45545012 0.70483734 1.03510352 0.50495512 0.03612261
# [19] 0.20599860 0.75816324