【问题标题】:Random number generation function not work随机数生成功能不起作用
【发布时间】:2019-01-25 19:58:30
【问题描述】:

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

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)

【问题讨论】:

  • 您需要在函数的最后一行添加一个 return 语句,例如return(inv.f)(这也可以隐式地完成,只需将该行设为inv.f
  • -Ben Bolker,感谢您的 cmets。但添加后得到的结果如下
  • RN(10) # NOT Work as I want [,1] [1,] 6.32196 [2,] 0.00000 [3,] 0.00000 [4,] 0.00000 [5,] 0.00000 [6, ] 0.00000 [7,] 0.00000 [8,] 0.00000 [9,] 0.00000 [10,] 0.00000

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2018-02-05
    相关资源
    最近更新 更多