Arrays 使用outer生成列表数组

Arrays 使用outer生成列表数组,arrays,r,list,Arrays,R,List,我在一个返回列表的函数上运行outer,我希望它返回一个列表数组,因为文档中这么说: 数组X和Y的外积是具有维数的数组A c(dim(X),dim(Y)),其中元素A[c(arrayindex.X,arrayindex.Y)]= 乐趣(X[arrayindex.X],Y[arrayindex.Y],…) 但是,以下代码会引发错误: outer(1:5, 1:5, Vectorize(function(x, y) list(x=x, y=y))) #Error in outer(1:5, 1:5,

我在一个返回列表的函数上运行
outer
,我希望它返回一个列表数组,因为文档中这么说:

数组X和Y的外积是具有维数的数组A c(dim(X),dim(Y)),其中元素A[c(arrayindex.X,arrayindex.Y)]= 乐趣(X[arrayindex.X],Y[arrayindex.Y],…)

但是,以下代码会引发错误:

outer(1:5, 1:5, Vectorize(function(x, y) list(x=x, y=y)))
#Error in outer(1:5, 1:5, Vectorize(function(x, y) list(x = x, y = y))) : 
#  dims [product 25] do not match the length of object [50]
似乎
outer
正试图将我的列表展平,而我希望它们保持完整。似乎没有用于控制这一点的参数(不像
sapply的
simplify
)。你有什么建议?我唯一的要求是至少保留两个维度用于索引目的。

您可以试试

outer(1:5, 1:5, Vectorize(function(x,y) list(c(x=x, y=y))))
输出25个元素的列表,每个元素都是命名向量

或者另一种选择是将其包装在“列表”中,以创建列表列表

outer(1:5, 1:5, Vectorize(function(x,y) list(list(x=x, y=y)))) 

这是否有助于
外部(1:5,1:5,向量化(函数(x,y)列表(c(x=x,y=y)))
或者可能是
外部(1:5,1:5,向量化(函数(x,y)列表(列表(x=x,y=y)))
这是什么语言?@akrun两者都可以。你知道为什么这个看似冗余的
列表
c
包装器会改变
外部
行为吗?@tonytonov
外部
输出是一个维数矩阵,等于两个向量长度的乘积。i、 这里是e.25。当我们使用
list(x=1,y=1)
它的长度是2,对于所有组合,长度都是50。所以,你需要一些东西来包装它,使其达到25<代码>列表
将其包装为25个