2013-05-24 3 views
0

У меня есть вектор длины 14, и я хотел бы проверить в наборах 5 таким образом:R Код: Эффективность Выпуск

compare = c(rep(1,4),rep(0,10)) # Vector 

g.test = matrix(0,5,10) 
for (i in 5:14){ 
g.test[,i-4] = head(tail(compare,i),5) 
} 
if (sum(colSums(g.test) >= 3 & colSums(g.test) < 5) > 0){yield = T} 

Я бегу через вектор compare[c(10:14)] в compare[c(9:13)] к ... до compare[c(1:5)] и проверяет, есть ли у него sum >= 3 и < 5.

НО, сравните только один такой вектор; У меня есть 100 000 таких векторов разных перестановок 1 и 0, но вся длина 14. Запустив мой код, я потратил 100 секунд на мой компьютер. Есть лучший способ сделать это?

  • Я на самом деле выполняю симуляционный тест для игры в покер в Техасе. Эта часть кода используется для проверки неполных стрижек.

ответ

0

Попробуйте это:

g.sums <- rowSums(embed(compare, 5)) 
yield <- any(g.sums >= 3 & g.sums < 5) 

100000 итераций на моей машине:

# user system elapsed 
# 2.438 0.052 2.493 
+0

То есть просто сладкая =) THx –

Смежные вопросы