R中的元素绑定

| 我想要一个函数
f
这样
(outer(X, Y, f))[i, j]
是X的第i个元素和Y的第j个元素的并排串联,类似
c(X[i], Y[j])
,或具有类似的结构。 此外,我希望此结果能够重复该过程,这样我们就可以
(outer(outer(X, Y, f), Z, f))[i, j, k]
是X的第i个元素,Y的第j个元素和Z的第k个元素的并排串联,即相等或具有与
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)
就是be8ѭ,
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实现这一目标? 谢谢!     
已邀请:
        函数
Vectorize()
在这里是您的朋友:将
f
定义为:
f <- Vectorize( function(a,b) c(as.list(a), as.list(b)), SIMPLIFY = FALSE )
然后,您可以这样做(使用上面的
foo
定义):
z <- foo(list(LETTERS[1:2], c(3, 4, 5), letters[6:7]))
例如,您可以检查输入内容是否与上面的示例匹配:
> z
, , 1

     [,1]   [,2]   [,3]  
[1,] List,3 List,3 List,3
[2,] List,3 List,3 List,3

, , 2

     [,1]   [,2]   [,3]  
[1,] List,3 List,3 List,3
[2,] List,3 List,3 List,3

> z[2,2,2]
[[1]]
[[1]][[1]]
[1] \"B\"

[[1]][[2]]
[1] 4

[[1]][[3]]
[1] \"g\"
    

要回复问题请先登录注册