我有两个序列,我正在尝试使用外部联接来合并,但返回列表
例如
s1 <- seq(1,3)
s2 <- seq(4,6)
并且我试图以这样一个列表矩阵结尾:
c(1,4)c(2,4)c(3,4)
c(1,5)c(2,5)c(3,5)
c(1,6)c(2,6)c(3,6)
所以我试图将外部乘积函数与自定义函数一起使用
listify <- function(a,b){
lst <- cbind(a,b)
}
outer(h1,h2,FUN = "listify")
这应该可以执行我想要的操作,但是我似乎无法使其正常工作。我已经读过这个question,它暗示了cbind的用法,但是正如我所说,我没有得到任何结果。我刚得到一个错误:
Error in dim(robj) <- c(dX, dY) :
dims [product 121] do not match the length of object [242]
答案 0 :(得分:1)
我可以很接近(或者一直到那边?)(a)使您的函数返回list
,并(b)将其向量化。来自?outer
FUN
...必须是向量化函数(或名称),至少要有两个参数,并返回与第一个(和第二个)长度相同的值。
listify <- function(a,b){
list(a,b)
}
lv = Vectorize(listify)
s1 <- seq(1,3)
s2 <- seq(4,6)
result = t(outer(s1,s2,FUN = lv))
result
# [,1] [,2] [,3]
# [1,] Integer,2 Integer,2 Integer,2
# [2,] Integer,2 Integer,2 Integer,2
# [3,] Integer,2 Integer,2 Integer,2
result[1, 1]
# [[1]]
# a b
# [1,] 1 4
result[2, 1]
# [[1]]
# a b
# [1,] 1 5
请注意,矩阵的每个元素都是长度为1的列表。
正如评论中指出的那样,没有更多信息,我看不到将这些单元素列表放在矩阵中的任何优势。大型expand.grid
表或3维数组似乎都可能更易于使用。