第一个函数运行良好,生成随机数:
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)
答案 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