随机数生成功能不起作用

时间:2018-08-19 13:16:12

标签: r for-loop random functional-programming numbers

第一个函数运行良好,生成随机数:

n <-10
inv.f <- array(0, dim=c(n ,1))
for(i in 1:n){ 
    u <- runif(1,0,1) 
    gexp.cdf <- function(x,beta=5.5){ (1-exp(-beta*x))-u } 
    inv.f[i,] <-  uniroot(gexp.cdf, lower=0, upper=5,extendInt="yes")$root
}
inv.f

第二个功能无效;它没有生成随机数。

RN <- function(n){
    inv.f <- array(0, dim=c(n ,1))
    for(i in 1:n){ 
       u <- runif(1,0,1) 
       gexp.cdf <- function(x,beta=5.5){ (1-exp(-beta*x))-u } 
       inv.f[i,] <-  uniroot(gexp.cdf, lower=0, upper=5,extendInt="yes")$root
    }
}
RN(5)

1 个答案:

答案 0 :(得分:1)

问题是R中的函数返回在函数内执行的 last 表达式的值。在当前版本中,这将是循环中评估的最后一个元素。此解决方案(将return(inv.f)添加为函数中的最后一条语句)对我有用:

RN <- function(n){
    inv.f <- array(0, dim=c(n ,1))
    for (i in 1:n){ 
       u <- runif(1,0,1) 
       gexp.cdf <- function(x,beta=5.5){ (1-exp(-beta*x))-u } 
       inv.f[i,] <-  uniroot(gexp.cdf, lower=0, upper=5,extendInt="yes")$root
    }
    return(inv.f)
}

示例:

set.seed(101)
RN(3)
##             [,1]
## [1,] 0.084651167
## [2,] 0.008147968
## [3,] 0.224888903