Я думаю, что вы просите, это довольно специфично для обуви и вряд ли будет "легко осуществимо" (эффективно).Другой способ взглянуть на это - создать условия во время эксперимента (если предположить, что это план испытаний).
Я написал lazyExpandGrid.R
, который похож на концепциюдля ленивого expand.grid
, что означает, что он не оценивает все возможные комбинации заранее.Код может быть вставлен позже в этот ответ, если это необходимо, но Github-Gist довольно твердый (и не короткий).
Используя его, вы должны быть в состоянии сделать:
set1 <- c(10, 15, 20)
set2 <- c(8, 9)
set3 <- c(1, 2, 3, 4)
iter <- lazyExpandGrid(set1, set2, set3)
while (is.data.frame(item <- iter$nextItem())) {
p <- sum(item)
if (p < 25 || 29 < p) next
print(item) # but really, do something more interesting here
}
# Var1 Var2 Var3
# 3 20 8 1
# Var1 Var2 Var3
# 5 15 9 1
# Var1 Var2 Var3
# 8 15 8 2
# Var1 Var2 Var3
# 11 15 9 2
# Var1 Var2 Var3
# 14 15 8 3
# Var1 Var2 Var3
# 17 15 9 3
# Var1 Var2 Var3
# 20 15 8 4
# Var1 Var2 Var3
# 23 15 9 4
Caveat emptor: функция в основном пригодна для использования, но, безусловно, есть способы ее улучшения.Например, использование is.data.frame(item <- iter$nextItem())
фактически является тестом isTruthy
(название из shiny
);в настоящее время он возвращает 1 строку data.frame
до тех пор, пока ничего не останется, затем возвращает FALSE
.Сейчас, когда я смотрю на это, это, безусловно, можно улучшить, у меня просто не было необходимости.Не стесняйтесь комментировать на странице GitHub Gist, если у вас есть мысли, ошибки и т. Д.