Я хочу функцию f
такую, чтобы
(outer(X, Y, f))[i, j]
- это параллельная конкатенация i-го элемента X и j-го элемента Y, что-то вроде c(X[i], Y[j])
или имеющая подобную структуру.
Кроме того, я хочу, чтобы этот результат был таким, чтобы процесс мог повторяться, и, таким образом, мы получаем, что
(outer(outer(X, Y, f), Z, f))[i, j, k]
- это параллельная конкатенация i-го элемента X, j-го элемента Y и k-го элемента Z, то есть чего-то равного или имеющего структуру, аналогичную это, c(X[i], Y[j], Z[k])
.
В конечном итоге я стремлюсь определить функцию, подобную этой:
foo <- function(a.list) {
Reduce(function(x, y) outer(x, y, f), a.list)
}
такой, что если
A <- foo(list(v_1, ..., v_p))
, тогда dim(A)
будет c(length(v_1), ..., length(v_p))
, а
A[i_1, ..., i_p] == c(v_1[i_1], ..., v_p[i_p])
для всех допустимых наборов индексов (i_1, ..., i_p).
Например:
> foo(list(LETTERS[1:2], c(3, 4, 5), letters[6:7]))
, , 1
[,1] [,2] [,3]
[1,] c("A", 3, "f") c("A", 4, "f") c("A", 5, "f")
[2,] c("B", 3, "f") c("B", 4, "f") c("B", 5, "f")
, , 2
[,1] [,2] [,3]
[1,] c("A", 3, "g") c("A", 4, "g") c("A", 5, "g")
[2,] c("B", 3, "g") c("B", 4, "g") c("B", 5, "g")
( ПРИМЕЧАНИЕ : я не знаю, является ли массив векторов, как результат, показанный в приведенном выше примере, даже допустимым / возможным в R, но я использую выражения типа c("A", 3, "f")
, чтобы предложить ' некоторый вектороподобный объект с элементами "A", 3 и "f" '.)
Что я могу использовать для f для достижения этого?
Спасибо!