Я знаю, что R работает наиболее эффективно с векторами, и циклов следует избегать. Мне трудно научиться писать код таким образом. Я хотел бы получить некоторые идеи о том, как "векторизовать" мой код. Здесь приведен пример создания 10-летней выборки данных для 10000 неповторимых комбинаций состояния (st
), plan1 (p1
) и plan2 (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 петлями на i, он занимает всего 2 секунды, но 10 000 занимает 8 минут. Любая идея почему?