Слишком долго для комментария, и @steves попросил меня разработать мой комментарий.Возьмем, к примеру,
> expand.grid(c(0,1), c(0,1), c(0,1))
Var1 Var2 Var3
1 0 0 0
2 1 0 0
3 0 1 0
4 1 1 0
5 0 0 1
6 1 0 1
7 0 1 1
8 1 1 1
В этой таблице 2^3=8
строк.В строке i
это двоичное расширение i-1
:
> f <- function(i) as.integer(rev(intToBits(i)))
> f(6-1) # this gives line 6, with some heading 0's
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Для expand.grid(x1, ..., x31)
имеется 2^31
строк.Выход f(i)
представляет собой вектор из 32 цифр.Поэтому, если вы измените f
, удалив первую цифру:
f <- function(i) as.integer(rev(intToBits(i)))[-1]
, тогда f(i-1)
точно предоставит строку i
из expand.grid(x1, ..., x31)
.