Если у меня есть два вектора с одинаковой длиной A<-c(5,10)
и B<-c(7,13)
, как я могу легко превратить эти два вектора в один вектор набора i. е. c((5,7),(7,13))
?
Создание кортежей из двух векторов
Ответ 1
Другие упомянули списки. Я вижу другие возможности:
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
Ответ 2
Ваш кортеж 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
Ответ 3
Я не уверен, что это именно то, что вы ищете, но:
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 по существу является вектором того, что вы хотите.
Если это не то, что вы ищете, может быть полезно, если бы вы могли расширить то, что именно вы хотели бы сделать с этим вектором.
Ответ 4
Я вижу, чего вы хотите достичь (потому что у меня была такая же проблема)!
Почему бы не использовать сложные числа, потому что они в основном представляют собой ничего, кроме двухмерных чисел, и они являются официальным типом данных в 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