Очевидно, что я должен был поработать над этим еще час, прежде чем опубликовать свой вопрос. Это так очевидно в ретроспективе. :)
Чтобы использовать векторную логику R, я вынул цикл и заменил его следующим:
st <- sample(c(12,17,24),10000,prob=c(20,30,50),replace=TRUE)
p1 <- sample(c(12,17,24),10000,prob=c(20,30,50),replace=TRUE)
p2 <- sample(c(12,17,24),10000,prob=c(20,30,50),replace=TRUE)
year <- rep(1991:2000,1000)
Теперь я могу сделать 100 000 сэмплов практически мгновенно. Я знал, что векторы были быстрее, но черт. Я предполагаю, что 100 000 циклов заняли бы более часа, используя цикл, и векторный подход занимает <1 секунду. Просто ради удовольствия я сделал векторы миллион. Это заняло ~ 2 секунды. Так как я должен проверить на провал, я пробовал 10 мм, но на моем 2-ГБ ноутбуке не хватило памяти. Я переключился на рабочий стол Vista 64 с оперативной памятью 6 ГБ и создал векторы длиной 10 мм за 17 секунд. На 100 мм все развалилось, так как один из векторов превысил 763 МБ, что привело к проблеме выделения с R. </p>
Векторы в R удивительно быстрые для меня. Наверное, поэтому я экономист, а не ученый.