在R中的for循环中按行绑定数据帧
我想进行蒙特卡罗模拟,平均值(I)从5到60,间隔为5,j从0到1,间隔为0.125。作为以下代码的输出,我希望为每个j获得的数据帧沿行绑定。例如,如果我想对给定的j执行10000次模拟,则生成的数据帧(即DF1)将有12列和10000行,其中12表示I的长度(即60/50。随后,每个j的DF1应按行绑定。因此,对于最终数据帧的8个j值,DF2将有80000行和12列。但是,在运行此代码时,我收到以下错误消息:“数据列表中的错误[[j]]有一种简单得多的方法可以做到这一点。首先,您可能并不真正想要在R中的for循环中按行绑定数据帧,r,for-loop,lapply,do.call,R,For Loop,Lapply,Do.call,我想进行蒙特卡罗模拟,平均值(I)从5到60,间隔为5,j从0到1,间隔为0.125。作为以下代码的输出,我希望为每个j获得的数据帧沿行绑定。例如,如果我想对给定的j执行10000次模拟,则生成的数据帧(即DF1)将有12列和10000行,其中12表示I的长度(即60/50。随后,每个j的DF1应按行绑定。因此,对于最终数据帧的8个j值,DF2将有80000行和12列。但是,在运行此代码时,我收到以下错误消息:“数据列表中的错误[[j]]有一种简单得多的方法可以做到这一点。首先,您可能并不真正想
j=0
,因为这会使标准偏差为零,并且所有值都是常量,但我将保留您设置的参数:
ivals <- seq(5, 60, 5)
jvals <- seq(0, 1, 0.125)
n <- 10 # Just 10 values for testing
ijval <- expand.grid(ival=ivals, jval=jvals) # 108 combinations of i and j
draw <- function(i, j, n) {rlnorm(n, log(i^2 / sqrt((i*j)^2 + i^2)), sqrt(log(1 + ((i*j)^2 / i^2))))}
DF <- t(mapply(draw, i=ijval$ival, j=ijval$jval, n=n)) # 108 rows by n columns
ivals因此在循环的第一次迭代中j
是0
。您试图将循环基于序列seq(0,1,0.125)
而不是整数序列,因此不能基于j
进行子集。
ivals <- seq(5, 60, 5)
jvals <- seq(0, 1, 0.125)
n <- 10 # Just 10 values for testing
ijval <- expand.grid(ival=ivals, jval=jvals) # 108 combinations of i and j
draw <- function(i, j, n) {rlnorm(n, log(i^2 / sqrt((i*j)^2 + i^2)), sqrt(log(1 + ((i*j)^2 / i^2))))}
DF <- t(mapply(draw, i=ijval$ival, j=ijval$jval, n=n)) # 108 rows by n columns