空のRベクトルを作成して新しいアイテムを追加する方法


92

Rpy2モジュールで提供されているように、PythonでRを使用したいと思います。Rには[]特定の列または行を抽出できる非常に便利な操作があることに気づきました。Pythonスクリプトでこのような機能を実現するにはどうすればよいですか?

私の考えは、Rベクトルを作成し、最終的なベクターはR. Iで作成していることと同じであるように、このベクターにそれらたかった要素を追加することですseq()が、最終的な結果は常にだろうので、それは、最初の数字1を持っているようです数字の1から始めてください。これは私が望むものではありません。それで、これを行うより良い方法はありますか?

回答:



56

ベクトルを事前に割り当てます

> (a <- rep(NA, 10))
 [1] NA NA NA NA NA NA NA NA NA NA

次に、[]を使用して値を挿入できます。


ベクトルの長さが最初からわかっている場合は、これが最もメモリ効率が良いため、これが最良の答えです
stevec

25

あなたはそのような空のベクトルを作成することができます

vec <- numeric(0)

そして、c()を使用して要素を追加します

vec <- c(vec, 1:5)

ただし、romunovが言うように、ベクターを事前に割り当ててから設定する方がはるかに優れています(これにより、要素を追加するたびにベクターの新しいコピーを再割り当てする必要がなくなります)。


numeric()を使用したソリューションが好きですが、私の経験では、0ではなくNAを使用するようになりました(numeric(2)を使用すると、0 0が返されます)。しかし、それは私の個人的な好みです。
RomanLuštrik2010

どうもありがとう!!しかし、1つの新しい要素を追加した後、以前の要素を解放することは可能ですか?単にrm()を使用する必要がありますか?
ligwin 2010

typeof(numeric(0))が「double」を与えるのに対し、必要な要素が「integer」を与えるという別の問題があり、追加すると、「新しい値のタイプは異なるはずがない」というエラーが発生しました。変換方法は?
ligwin 2010

Pythonで作業する場合、「as」はキーワードです。さらに、Pythonにはそのようなデータ型がないため、「as.integer」は機能しないと思いますか?
ligwin 2010

romunov-numeric(0)は、要素が0である長さ1のベクトルではなく、長さが0(要素なし)の数値ベクトルを作成することを意味します
Aaron Statham

6

空のベクターを作成するには:

vec <- c();

数値など、必要なベクトルのタイプについては想定していません。

ベクターを作成したら、次のようにベクターに要素を追加できます。

たとえば、数値1を追加するには、次のようにします。

vec <- c(vec, 1);

または、文字列値「a」を追加するには

vec <- c(vec, "a");

4
これを実際に試しましたか?vec <- c()vecをに設定しNULLます。あなたが使用することになり、空のベクターをしたい場合vec <- character()vec <- numeric()など
マシュー・ワイズ

5

私も見ました

x <- {}

これで、任意の次元のベクトルを連結またはバインドできます x

rbind(x, 1:10)
cbind(x, 1:10)
c(x, 10)

2
これはとまったく同じでありx <- NULL、nowhereへの参照以外に何も作成しません。
Joris Meys、2013

3

Braniが指摘したように、vector()はソリューションです。

newVector <- vector(mode = "numeric", length = 50)

初期値として50の「0」を持つ「newVector」という名前のベクトルを返します。また、既存のベクトルに新しいスカラーを追加するだけで、拡張されたベクトルに到達することもよくあります。たとえば、

aVector <- c(aVector, newScalar)


2

rpy2では、Rで「[」と同じ演算子を取得する方法は、「。rx」を使用することです。rpy2での抽出に関するドキュメントを参照してください

ベクトルを作成する場合、Pythonの使い方がわかっていれば問題はありません。ベクトルの作成に関するドキュメントを参照してください


私はこの目的のためにpythonで関数を作成していましたが、これは非常に複雑であり、どれだけ広く適用できるかわかりません。今、私はこの演算子を使用すると、人生がはるかに簡単になると思います:)
ligwin 2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.