如果我有两个相同长度A<-c(5,10)
和B<-c(7,13)
的向量,我怎么能轻易地将这两个向量转换为单个元组向量i。即c((5,7),(7,13))
?
答案 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)
如果您想要一个列表列表(如果A
和B
不是同一类型,则需要这些列表)
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