我有以下功能:
fn <- function()
{ i = 1:100
v1 = rnorm(100,100,100)
v2 = rnorm(100,100,100)
out = data.frame(i, v1,v2)
return(out)
}
- 我的问题:**我想在R中使用
replicate()
函数来运行这个函数100次,并将所有100次运行的输出合并成一个输出(即3列,100x100 = 10000行):
- 我的问题:**我想在R中使用
output = replicate(100, fn())
当我这样做的时候,数据以一些其他的格式出来:
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
i integer,100 integer,100 integer,100 integer,100 integer,100 integer,100 integer,100
v1 numeric,100 numeric,100 numeric,100 numeric,100 numeric,100 numeric,100 numeric,100
v2 numeric,100 numeric,100 numeric,100 numeric,100 numeric,100 numeric,100 numeric,100
我知道我可以用FOR循环执行完全相同的任务--但是有什么方法可以用replicate()
函数来完成这个任务吗?
实际上,我有一个非常大的函数,我不想用"i"和"j"索引来修改它--我想也许我可以把replicate()
放在一个循环中。
my_list = list()
for ( i in 1:100)
{
out_i = replicate(fn(),1)
out_i$round = i
my_list[i] = out_i
}
final <- do.call(rbind.data.frame, my_list)
但是我不确定怎么做--谁能告诉我怎么做吗?
谢谢!
注:是否正确?
my_list <- lapply(1:100, function(i) {
out_i <- fn()
out_i$round <- i
out_i
})
final <- do.call(rbind, my_list)
#### alternate method
my_list <- lapply(1:100, function(i) {
out_i <- my_function()
out_i$lapply_index <- i
out_i
})
final <- do.call(rbind, my_list)
2条答案
按热度按时间mwkjh3gx1#
使用
simplify=FALSE
,然后使用do.call(rbind, ..)
:j9per5c42#
在问题中,它说“有没有什么方法可以用replicate()函数做到这一点?"。以下是我的建议。
a1返回第一个结果