第一个函数运行良好,生成随机数:
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)
问题是 R 中的函数返回函数中执行的最后一个表达式的值。在当前版本中,这将是循环中评估的最后一个元素。这个解决方案(添加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