Как я могу создать список () маргинальных квантильных функций через a для l oop в r - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь создать список, содержащий маргинальные квантильные функции для использования в Varbound (). Моя проблема заключается в том, что мне нужно поместить разные значения среднего и SD между функциями, поэтому я использовал For l oop:

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 (), я ошибаюсь не в том, чтобы использовать список функций, а список значений:

VaRbound(0.999, N=500, qmargins=cuantiles)
Error in qmargins[[j]](q) : attempt to apply non-function

Кто-нибудь знает, как я могу создать список предельных функций квантиля с учитывая среднее и sd через FOR l oop, но оставить p в качестве переменной ??

1 Ответ

0 голосов
/ 29 апреля 2020

Если вы спроектируете distribuciones для возврата функции, а затем создадите вызов этой функции для доставки ее конкретного c экземпляра, значения p, m и v будут в среде этой указанной c экземплярной функции:

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
...