expand.grid (a, b, c) создает все комбинации значений в a, b и c в матрице - по существу, заполняя объем трехмерного куба. То, что я хочу, - это способ получения срезов или линий из этого куба (или более высокой размерной структуры) с центром в кубе.
Итак, учитывая, что a, b, c - все векторы нечетной длины (поэтому они имеют центр), и в этом случае, скажем, они имеют длину 5. Моя гипотетическая функция slice.grid:
slice.grid(a,b,c,dimension=1)
возвращает матрицу координат точек по трем центральным линиям. Почти эквивалентно:
rbind(expand.grid(a[3],b,c[3]),
expand.grid(a,b[3],c[3]),
expand.grid(a[3],b[3],c))
почти, потому что центральная точка повторяется три раза. Кроме того:
slice.grid(a,b,c,dimension=2)
должен возвращать матрицу, эквивалентную:
rbind(expand.grid(a,b,c[3]), expand.grid(a,b[3],c), expand.grid(a[3],b,c))
- это три пересекающиеся плоскости, ориентированные по оси (с повторяющимися точками в матрице на пересечениях).
А потом:
slice.grid(a,b,c,dimension=3)
- это то же самое, что и expand.grid (a, b, c).
Это не так уж плохо с тремя параметрами, но в идеале я хотел бы сделать это с N параметрами, переданными в функцию expand.grid (a, b, c, d, e, f, dimension = 4) - маловероятно, что я когда-либо хотел бы, чтобы размерность больше чем 3 все же.
Это можно сделать, выполнив expand.grid, а затем выделив те точки, которые необходимы, но я не уверен, как построить этот критерий. И у меня всегда есть ощущение, что эта функция существует в какой-то упаковке ...
[Редактировать] Правильно, я думаю, что теперь у меня есть критерий - он связан с тем, сколько раз центральное значение появляется в каждой строке. Если оно меньше или равно вашему измерению + 1 ...
Но генерация полной матрицы быстро растет. Пока подойдет.