我试图创建一个包含边缘分位数函数的列表,以在Varbound()中使用。我的问题是我需要在函数之间放置均值和sd的不同值,因此我使用了[[For循环:
distribuciones<-function(p,m,v){
qnorm(p,mean=m,sd=sqrt(v))}
p<-0.99
cuantiles<-list()
for(i in 1:5){
d<-distribuciones(p,as.numeric(medias[i]),as.numeric(varianzas[i]))
cuantiles[i]<-d}
两者和“ varianzas”是均值和sd来自的列表。但是,当我想使用Varbound()im时出现错误,即不使用函数列表而是值列表:“ medias”
VaRbound(0.999, N=500, qmargins=cuantiles)
Error in qmargins[[j]](q) : attempt to apply non-function
有人知道如何通过FOR循环使用给定的[[mean和
sd创建边际分位数函数列表,但将p保留为变量?
distribuciones<-function(p,m,v){ function(p,m,v){
qnorm(p=p,mean=m,sd=sqrt(v))}}
qn <- distribuciones(.5,0,1)
然后您得到:
> qn
function(p,m,v){
qnorm(p=p,mean=m,sd=sqrt(v))}
<bytecode: 0x563aede21890>
<environment: 0x563aee272720>
> ls(environment(qn))
[1] "m" "p" "v"
> environment(qn)$p
[1] 0.5
> environment(qn)$m
[1] 0
> environment(qn)$v
[1] 1
您也可以将其设置为创建无参数函数:
distribuciones<-function(p,m,v){ function(){
qnorm(p=p,mean=m,sd=sqrt(v))}}
qn <- distribuciones(.5,0,1)
> qn()
[1] 0