我知道 R 使用向量最有效,应该避免循环。我很难自学以这种方式实际编写代码。我想要一些关于如何“矢量化”我的代码的想法。st
下面是为 state ( )、plan1 ( p1
) 和 plan2 ( )的 10,000 个非唯一组合创建 10 年样本数据的示例p2
:
st<-NULL
p1<-NULL
p2<-NULL
year<-NULL
i<-0
starttime <- Sys.time()
while (i<10000) {
for (years in seq(1991,2000)) {
st<-c(st,sample(c(12,17,24),1,prob=c(20,30,50)))
p1<-c(p1,sample(c(12,17,24),1,prob=c(20,30,50)))
p2<-c(p2,sample(c(12,17,24),1,prob=c(20,30,50)))
year <-c(year,years)
}
i<-i+1
}
Sys.time() - starttime
这需要大约 8 分钟才能在我的笔记本电脑上运行。正如预期的那样,我最终得到了 4 个向量,每个向量都有 100,000 个值。如何使用矢量函数更快地做到这一点?
附带说明一下,如果我将上面的代码限制为 i 上的 1000 个循环,它只需要 2 秒,但 10,000 个需要 8 分钟。知道为什么吗?