Ребята, Спасибо, что нашли время на пост.Я хотел попросить общие стратегии, чтобы улучшить ускорение вычислений, а также ускорить процесс печати некоторых значений в окне консоли, зацикливая очень простые вычисления.
Например, я провел небольшую симуляцию лотереикод.Код ниже сгенерирует 6 выигрышных номеров от 1 до 49.И затем он продолжает рисовать 6 чисел снова семь раз за раз, пока они не совпадают с выигрышным числом.
Он будет отображать 7 розыгрышей и итераций (т.е. количество розыгрышей) в одной строке, пока они не совпадут с выигрышным числом.
Lottery = function(computetime=FALSE){
# winning numbers
sixnumber = sample(1:49, 6, replace=FALSE)
getfirst1 = getfirst2 = getfirst3 = getfirst4 = getfirst5 = getfirst6 = getfirst7 = 0
iter=0
if(computetime==FALSE){
# loop until we have match winning number from 7 draws
while(! 6 %in% c(getfirst1, getfirst2, getfirst3, getfirst4, getfirst5, getfirst6, getfirst7)){
iter=iter+7
draw1 = sample(1:49, 6, replace=FALSE)
draw2 = sample(1:49, 6, replace=FALSE)
draw3 = sample(1:49, 6, replace=FALSE)
draw4 = sample(1:49, 6, replace=FALSE)
draw5 = sample(1:49, 6, replace=FALSE)
draw6 = sample(1:49, 6, replace=FALSE)
draw7 = sample(1:49, 6, replace=FALSE)
# added for line to be arranged consistantly by formatting the numbers in each draw
draw1[draw1<10] = paste0(0,draw1[draw1<10])
draw2[draw2<10] = paste0(0,draw2[draw2<10])
draw3[draw3<10] = paste0(0,draw3[draw3<10])
draw4[draw4<10] = paste0(0,draw4[draw4<10])
draw5[draw5<10] = paste0(0,draw5[draw5<10])
draw6[draw6<10] = paste0(0,draw6[draw6<10])
draw7[draw7<10] = paste0(0,draw7[draw7<10])
# sum of the matching numbers in each draw
getfirst1 = sum(sixnumber %in% draw1)
getfirst2 = sum(sixnumber %in% draw2)
getfirst3 = sum(sixnumber %in% draw3)
getfirst4 = sum(sixnumber %in% draw4)
getfirst5 = sum(sixnumber %in% draw5)
getfirst6 = sum(sixnumber %in% draw6)
getfirst7 = sum(sixnumber %in% draw7)
# Print out in console
cat(draw1, " ", draw2, " ", draw3, " ", draw4, " ", draw5, " " , draw6, " " , draw7, " ", iter, "\n")
# without Sys.sleep, printing process will be slowed down and get lagged
Sys.sleep(time=0.0001)
}
return(sixnumber)
}else{
# This part will test the time until 3500 draws
a=Sys.time()
while(iter != 3500){
iter=iter+7
draw1 = sample(1:49, 6, replace=FALSE)
draw2 = sample(1:49, 6, replace=FALSE)
draw3 = sample(1:49, 6, replace=FALSE)
draw4 = sample(1:49, 6, replace=FALSE)
draw5 = sample(1:49, 6, replace=FALSE)
draw6 = sample(1:49, 6, replace=FALSE)
draw7 = sample(1:49, 6, replace=FALSE)
draw1[draw1<10] = paste0(0,draw1[draw1<10])
draw2[draw2<10] = paste0(0,draw2[draw2<10])
draw3[draw3<10] = paste0(0,draw3[draw3<10])
draw4[draw4<10] = paste0(0,draw4[draw4<10])
draw5[draw5<10] = paste0(0,draw5[draw5<10])
draw6[draw6<10] = paste0(0,draw6[draw6<10])
draw7[draw7<10] = paste0(0,draw7[draw7<10])
getfirst1 = sum(sixnumber %in% draw1)
getfirst2 = sum(sixnumber %in% draw2)
getfirst3 = sum(sixnumber %in% draw3)
getfirst4 = sum(sixnumber %in% draw4)
getfirst5 = sum(sixnumber %in% draw5)
getfirst6 = sum(sixnumber %in% draw6)
getfirst7 = sum(sixnumber %in% draw7)
cat(draw1, " ", draw2, " ", draw3, " ", draw4, " ", draw5, " " , draw6, " " , draw7, " ", iter, "\n")
Sys.sleep(time=0.0001)
}
b=Sys.time()
cat(b-a, "Seonds for 3500 draws")
}
}
Lottery(computetime = TRUE)
Я хотел бы получить несколько общих советов о том, какускорить вычисления
1) семплирования 6 чисел за семь раз
2) Самый быстрый и самый плавный способ распечатки этих семи рисунков и повторения по одной строке за раз.(например, без функции Sys.sleep()
или текущей настройки Sys.sleep (0,0001) консоль выводит строки с задержкой примерно через 30 секунд работы функции. Я хочу знать, как избежать этой задержки в процессе печати.)
Цель этого поста - повысить мою эффективность и лучше понять процесс печати консоли в R.
Большое вам спасибо!