【发布时间】:2021-05-26 08:27:15
【问题描述】:
我对 R 还很陌生,正在尝试进行一些模拟。 我有一个具有各种设置的群组数据框
n = 10000
ir.1 = c(0.01, 0.02, 0.05)
ir.2 = c(0.1, 0.2, 0.3, 0.4)
setting.1 = c(0.5, 0.9)
setting.2 = c(0.4, 0.6)
cohorts = expand.grid(n = n, ir.1 = ir.1, ir.2 = ir.2, setting.1 = setting.1, setting.2 = setting.2)
基于这些,我想使用每个群组(群组数据框中的每一行)进行模拟。
我一直在尝试使用replicate
sim_list = replicate(n = nrow(cohorts),
expr = {data.frame(
time.1 = rexp(n, ir.1),
time.2 = rexp(n, ir.2)
)}, simplify = F
)
str(sim_list)
List of 48
$ :'data.frame': 10000 obs. of 2 variables:
..$ time.1: num [1:10000] 156.75 68.2 4.81 105.74 29.82 ...
..$ time.2: num [1:10000] 5.66 13.08 3.88 3.32 23.99 ...
$ :'data.frame': 10000 obs. of 2 variables:
..$ time.1: num [1:10000] 134.7 48.1 30.9 46 104.2 ...
..$ time.2: num [1:10000] 20.57 2.38 1.64 2.49 1.53 ...
................
从这里我确实得到了一个包含 48 个数据帧的列表,每个数据帧有 10000 行,但指数函数绘制似乎每次都基于相同的设置。
我希望 sim_list[[1]] 的抽奖基于 cohorts (cohorts[1,]) 第一行的设置,sim_list[[2]] 的抽奖是基于群组[2,] 等等...
这将导致每个数据帧的 time.1 值的平均值从大约。 20 - 100(基于 ir.1 的值),但它们的范围从大约。 55-58 (相当于使用 ir.1 中 3 个值的平均值进行 rexp 绘制???):
range(lapply(sim_list, function(x) { mean(x[['time.1']])}))
[1] 55.49693 58.35876
问题可能是为此使用replicate 函数,但我不知道该怎么做。创建一个大数据框并按队列编号对它们进行分组?使用某种应用功能?还有什么?
我希望这是有道理的!
【问题讨论】:
标签: r