从两个向量创建元组

时间:2011-10-17 21:09:13

标签: r

如果我有两个相同长度A<-c(5,10)B<-c(7,13)的向量,我怎么能轻易地将这两个向量转换为单个元组向量i。即c((5,7),(7,13))

4 个答案:

答案 0 :(得分:16)

其他人提到了名单。我看到了其他可能性:

cbind(A, B)  # makes a column-major  2x2-"vector"
rbind(A, B)  # an row major 2x2-"vector" which could also be added to an array with `abind`

也可以保留他们的“起源”

AB <- cbind(A=A, B=B)
array(c(AB,AB+10), c(2,2,2) )
, , 1
     [,1] [,2]
[1,]    5    7
[2,]   10   13
, , 2
     [,1] [,2]
[1,]   15   17
[2,]   20   23

> abind( array(c(AB,AB+10), c(2,2,2) ), AB+20)
, , 1
      A  B
[1,]  5  7
[2,] 10 13

, , 2
      A  B
[1,] 15 17
[2,] 20 23

, , 3
      A  B
[1,] 25 27
[2,] 30 33

答案 1 :(得分:8)

您的元组向量c((5,7),(7,13))是无效的语法。但是,你的短语让我觉得你在想像python的zip这样的东西。你想如何用R代表你的元组? R具有异构(递归)类型list和同类型vector;没有标量类型(即只包含单个值的类型),只有长度为1的向量(有点过于简单化)。

如果你希望你的元组是矩阵的行(所有类型相同,它们在这里):

rbind(A,B)

如果你想要一个载体列表

mapply(c, A, B, SIMPLIFY=FALSE)

如果您想要一个列表列表(如果AB不是同一类型,则需要这些列表)

mapply(list, A, B, SIMPLIFY=FALSE)

把这一切放在一起:

> A<-c(5,10)
> B<-c(7,13)
> 
> cbind(A,B)
      A  B
[1,]  5  7
[2,] 10 13
> mapply(c, A, B, SIMPLIFY=FALSE)
[[1]]
[1] 5 7

[[2]]
[1] 10 13

> mapply(list, A, B, SIMPLIFY=FALSE)
[[1]]
[[1]][[1]]
[1] 5

[[1]][[2]]
[1] 7


[[2]]
[[2]][[1]]
[1] 10

[[2]][[2]]
[1] 13

答案 2 :(得分:4)

我不确定这正是你想要的,但是:

list(A, B)

给你一个像这样的结构:

> str(list(A, B))
List of 2
 $ : num [1:2] 5 10
 $ : num [1:2] 7 13

,字面意思如下:

  

dput(列表(A,B))   列表(c(5,10),c(7,13))

...我认为,这与你可以得到的建议的最终结果差不多。

R中的列表本质上是您想要的任何向量。

如果这不是你想要的,那么如果你可以扩展你想要用这个向量做什么,可能会有所帮助。

答案 3 :(得分:1)

我知道你想要完成什么(因为我有同样的问题)!

为什么不使用复数,因为它们基本上只是二维数,而且它们是R中的官方数据类型,并且提供了所有必要的方法:

A <- complex(real=5,imaginary=10) 
B <- complex(real=7,imaginary=13)

c(A,B)
## [1] 5+10i 7+13i

matrix(c(A,B),ncol=1)
##       [,1]
## [1,] 5+10i
## [2,] 7+13i