我有两个向量:
u <- c(1, 3, 5)
v <- c(2, 4, 6)
我想将其组合成一个结果res
,它必须是一个二维向量列表。
是否有办法智能地执行以下操作?
res <- list(c(u[1], v[1]), c(u[1], v[2]), c(u[1], v[3]), c(u[2], v[1]) ... )
编辑这个问题,试图更好地解释我想要的东西。
答案 0 :(得分:1)
你需要类似于cartesian product的矢量
> u
[1] 1 3 5
> v
[1] 2 4 6
与用户hrbrmstr解释一样,可以通过这种方式获得组合
> r = expand.grid(v, u)
> r
Var1 Var2
1 2 1
2 4 1
3 6 1
4 2 3
5 4 3
6 6 3
7 2 5
8 4 5
9 6 5
请注意,我已切换u
和v
以适合您的目标数据结构。
然后我选择两个列向量
> x <- r[[2]]
> y <- r[[1]]
> x
[1] 1 1 1 3 3 3 5 5 5
> y
[1] 2 4 6 2 4 6 2 4 6
及其长度
> n <- length(x)
> n
[1] 9
然后使用n
元素
> res <- vector(mode="list", length=n)
最后列表被填满:
> for (i in 1:n) {
+ res[[i]] = c(x[i], y[i])
+ }
产生
> res
[[1]]
[1] 1 2
[[2]]
[1] 1 4
[[3]]
[1] 1 6
[[4]]
[1] 3 2
[[5]]
[1] 3 4
[[6]]
[1] 3 6
[[7]]
[1] 5 2
[[8]]
[1] 5 4
[[9]]
[1] 5 6
>
也许有更快的方法,但我相信这会给你想要的数据结构。
答案 1 :(得分:0)
除非您需要位置4中的[3,2]
,否则您能否接受expand.grid
的结果?
v1 <- c(1,3,5)
v2 <- c(2,4,6)
as.matrix(expand.grid(v1,v2))
## Var1 Var2
## [1,] 1 2
## [2,] 3 2
## [3,] 5 2
## [4,] 1 4
## [5,] 3 4
## [6,] 5 4
## [7,] 1 6
## [8,] 3 6
## [9,] 5 6