2011-10-17 10 views
17

同じ長さのベクトルが2つある場合は、どのようにしてこれらの2つのベクトルを1つのタプルベクトルに簡単に変換できますか? e。 c((5,7),(7,13))?私はあなたが探しているもの、これは正確であるかどうか分からない2つのベクトルからタプルを作成する

+0

なぜ彼らは基本的には何もなく、2次元の数値ではないので、複素数を使用して、彼らが利用可能なすべての必要なメソッドとRでの公式データ型ではありませんリストは汎用ベクトルであり、各要素は任意のタイプのRオブジェクトとすることができる。この場合、各要素がタプルを含む長さ2のベクトルであるリストが必要です。 –

+0

'c(A、B)'は動作するので、質問を明確にする必要があります。私。それのどこが悪いんだい? –

+0

@ジョシュア - そのアプローチの潜在的な崩壊は、どの数字がタプルの一部であるかを識別するのに苦労しないことです。 –

答えて

14

他にもリストが記載されています。あなたのタプルベクトルc((5,7),(7,13))は有効な構文ではありません彼らの「起源」

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 
+0

ありがとうございます。すべての混乱については申し訳ありません。私はちょうど私のベクトル= /の各行をペアにしたいと思った。 – LostLin

+1

data.frame(A = A、B = B) – Oren

4

、しかし:

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

と文字通りのように表される:あなたはこのような構造を与える

list(A, B)

これは:

dput(list(A、B)) list(c(5,10)、c(7,13))

...あなたが得ることができるように、提案された最終結果にほぼ近いと思います。

Rのリストは基本的には、あなたが望むもののベクトルです。

これがあなたが探しているものでない場合は、このベクターで何をしたいのかを広げることができれば役に立ちます。

+0

+1 'list()'は確かに最も適したオブジェクトタイプのようです。 –

+0

@マット、私はそれが彼が望むものから回転していると思う - 列の行とその逆。しかし、確かに! –

+0

@Ed 'str()'ビットは単なる読みやすい表現です。リスト自体には行や列がまったくありません。文字通りタプルを含むベクトルです。タプルを繰り返し処理するには、リストは確かに行く方法です。しかし、アプリケーションがここに何であるかは分かりません。 –

5

を維持するためにALSP可能である

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` 

:私は他の可能性を参照してください。しかし、あなたの言いたいことは、あなたがPythonのzipのようなものを考えていると思うようになります。どのようにあなたのタプルをRで表現したいですか? Rは異種(再帰的)タイプlistと同種のタイプvectorを持ちます。スカラ型(すなわち、単一の値を保持する型)はなく、長さ1のベクトル(やや単純化されています)があります。

あなたはあなたのタプルが行列の行(彼らはここにいるすべて同じタイプ)になりたい場合は:あなたはベクトルのリストが必要な場合

rbind(A,B) 

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

あなたの場合(ABが同じ型でない場合は、あなたが必要となるものです)リストのリスト

mapply(list, A, B, SIMPLIFY=FALSE) 
をしたいです10

すべて一緒にこれを置く:

> 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 
+0

Rにはアトミックタイプ(またはモード)と呼ばれるものがあります。 '?atomic'を参照してください。私はあなたが意味するもの(スカラー値)を知っていると思うが、他はもっと混乱するかもしれない。 –

+0

@JoshuaUlrich「原子」は、Rの中で特定の意味を持っているので、言葉の最良の選択ではないということは正しいです。私が得ることを試みていたアイデアは、ただ一つの価値しか持たないタイプがないということでした。あなたがそれを表現する良い方法の提案をしているなら、私はそれを考慮して喜んでいるでしょう。 –

+0

私は[スカラー](http://en.wikipedia.org/wiki/Scalar_%28computing%29)が好きです。 –

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 
関連する問題