如何通过r中的for循环创建边际分位数函数的list()

问题描述 投票:1回答:1

我试图创建一个包含边缘分位数函数的列表,以在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}
两者

“ medias”

“ varianzas”是均值和sd来自的列表。但是,当我想使用Varbound()im时出现错误,即不使用函数列表而是值列表:VaRbound(0.999, N=500, qmargins=cuantiles) Error in qmargins[[j]](q) : attempt to apply non-function
有人知道如何通过FOR循环使用给定的[[mean

sd创建边际分位数函数列表,但将p保留为变量?

r list function quantile
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.