我正在一个返回列表的函数上运行outer
,并且我希望它返回一个列表数组,因为文档是这样说的:
The outer product of the arrays X and Y is the array A with dimension c(dim(X), dim(Y)) where element A[c(arrayindex.x, arrayindex.y)] = FUN(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))))
关于arrays - 使用outer生成列表数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29410041/