我知道R最有效的方法是使用向量,并且应该避免循环。但我很难自己学会实际编写这种代码。我希望能得到一些有关如何“向量化”我的代码的想法。下面是一个创建10年样本数据的例子,适用于10,000个非唯一状态(st
)、计划1(p1
)和计划2(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个值。如何使用向量函数更快地完成这项工作?
顺便提一下,如果我将上述代码限制为1000次循环,只需要2秒钟,但是增加到10,000次就需要8分钟。有什么想法为什么会这样?
c()
调用不会更改,请将其放在循环之上。每个循环都会不必要地调用c()
6次,这将导致比您需要的600,000多次对c()
的函数调用 :-) - Vince