R语言 合并“重复测定”的输出

pokxtpni  于 2023-02-01  发布在  其他
关注(0)|答案(2)|浏览(153)

我有以下功能:

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行):
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)
mwkjh3gx

mwkjh3gx1#

使用simplify=FALSE,然后使用do.call(rbind, ..)

### does not work
output <- replicate(2, mtcars[1:2,])
output
#      [,1]      [,2]     
# mpg  numeric,2 numeric,2
# cyl  numeric,2 numeric,2
# disp numeric,2 numeric,2
# hp   numeric,2 numeric,2
# drat numeric,2 numeric,2
# wt   numeric,2 numeric,2
# qsec numeric,2 numeric,2
# vs   numeric,2 numeric,2
# am   numeric,2 numeric,2
# gear numeric,2 numeric,2
# carb numeric,2 numeric,2

### does work
output <- replicate(2, mtcars[1:2,], simplify = FALSE)
output
# [[1]]
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
# [[2]]
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
output <- do.call(rbind, output)
output
#                mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4       21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag   21   6  160 110  3.9 2.875 17.02  0  1    4    4
# Mazda RX41      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag1  21   6  160 110  3.9 2.875 17.02  0  1    4    4
j9per5c4

j9per5c42#

在问题中,它说“有没有什么方法可以用replicate()函数做到这一点?"。以下是我的建议。

a=replicate(100, list(fn()))

a1返回第一个结果

相关问题