【问题标题】:How can I create a list() of marginal quantile functions through a for loop in r如何通过 r 中的 for 循环创建边际分位数函数的 list()
【发布时间】:2020-08-12 20:26:14
【问题描述】:

我试图创建一个包含边际分位数函数的列表以在 Varbound() 中使用。我的问题是我需要在函数之间放置不同的 mean 和 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() 时:

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

有谁知道如何通过 FOR 循环创建具有给定 meansd 的边际分位数函数列表,但留下 p作为变量??

【问题讨论】:

  • 您的distribuciones 函数并非旨在返回函数。它正在返回值。

标签: r list function quantile


【解决方案1】:

如果您将distribuciones 设计为返回一个函数,然后创建对该函数的调用以传递它的特定实例,则pmv 的值将在环境中那个特定的实例化函数:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2022-11-30
    • 2021-07-25
    • 2021-02-01
    • 2021-07-11
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多