【发布时间】:2017-08-07 09:56:35
【问题描述】:
我有多个生成随机数的函数。所有这些功能都描述了相同的过程。我想随机选择一个函数 100 次,执行它并将结果(每个函数执行 100 行)保存在一个表中。
对于函数我写了如下代码:
# AKBAS u.a. (2009)
akbas <- function(n){
x.m=se.m=x.st=se.st=NULL
for(i in 1:n){
print(x.m[i] <- runif(n = 1, min = 0, max = 1))
se.m[i] <- 0.17 * (x.m[i]^2) - 0.03 * x.m[i]
print(x.st[i] <- runif(n = 1, min = 1, max = 5))
se.st[i] <- 0.17 * (x.st[i]^2) - 0.03 * x.st[i]
}
return(list(se.m, se.st))
}
se.akbas <- matrix(unlist(akbas(100)),100, 2)
# FUCHS u.a.(2007)
fuchs07 <- function(n){
x.m=se.m=x.st=se.st=NULL #solves indexing problem
for(i in 1:n){
print(x.m[i] <- runif(n = 1, min = 0, max = 1))
se.m[i] <- 0.11 * (x.m[i]^2) - 0.02 * x.m[i]
print(x.st[i] <- runif(n = 1, min = 1, max = 5))
se.st[i] <- 0.11 * (x.st[i]^2) - 0.02 * x.st[i]
}
return(list(se.m, se.st))
}
se.fuchs07 <- matrix(unlist(fuchs07(100)),100, 2)
# BELL AND GLADE (2004)
bell.glade <- function(n){
x.m=se.m=x.st=se.st=NULL
for(i in 1:n){
se.m[i] <- runif(n = 1, min = 0, max = 1)
se.m[i] <- 0.2
se.st[i] <- runif(n = 1, min = 1, max = 5)
se.st[i] <- 0.5
}
return(list(se.m, se.st))
}
se.bell.glade <- matrix(unlist(bell.glade(100)),100, 2)
# BORTER (1999b,a)
borter <- function(n){
x.m=se.m=x.st=se.st=NULL
for(i in 1:n){
se.m[i] <- runif(n = 1, min = 0, max = 1)
se.m[i] <- 0.1
se.st[i] <- runif(n = 1, min = 1, max = 5)
se.st[i] <- 0.5
}
return(list(se.m, se.st))
}
se.borter <- matrix(unlist(borter(100)),100, 2)
# FELL UND HARTFORD (1997)
fell.hartford <- function(n){
x.m=se.m=x.st=se.st=NULL
for(i in 1:n){
se.m[i] <- ifelse (runif(n = 1, min = 0, max = 1) < 0.25, 0.1, 0.4)
se.st[i] <- ifelse (runif(n = 1, min = 1, max = 5) < 1.5, 0.4, 0.7)
}
return(list(se.m, se.st))
}
se.fell.hartford <- matrix(unlist(fell.hartford(100)),100, 2)
funktionen <- list(se.akbas, se.bell.glade, se.borter, se.fell.hartford, se.fuchs07)
murgang <- do.call(rbind, funktionen)
最终输出应该是长格式 - se.m 和 se.st 堆叠。我包括一个指标列,其中 se.m 的值为 1,se.st 的值为 2。这里是输出的一小部分:
495 1 0.0228
496 1 0.0494
497 1 0.0158
498 1 0.0169
499 1 0.0357
500 1 0.0436
501 2 0.3459
502 2 2.7998
503 2 3.6571
504 2 3.1501
505 2 2.7418
506 2 0.5286
但是,我被困在随机函数选择get.f 的过程中。我在想类似的东西:
get.f <- function(m){
sample(funktionen, 100, replace = TRUE)
}
如何保存结果?
对简化这个过程有什么建议吗?我确信有一种更有效的方法,但我还没有找到它。
我是 R 新手,我会高度评价任何建设性的 cmets 和/或批评。
PS:这可能不是有史以来最好的问题,我知道你给我的评价是-1。但是如果你这样做了,请告诉我为什么,这样我可以改进,以后不会犯同样的错误。
【问题讨论】:
-
为什么不直接对函数的索引进行采样并按列表中的位置调用它们呢?
ss <- sample(length(funktionen),size=100,replace=TRUE); res <- unlist(lapply(ss,function(i) funktionen[[i]](100))?
标签: r function random nested simulation