web-dev-qa-db-ja.com

Rオブジェクトの名前を変更するにはどうすればよいですか?

Quantmodパッケージを使用して、Yahooから金融系列データをインポートしています。

library(quantmod)
getSymbols("^GSPC")
[1] "GSPC"

オブジェクトの名前を「GSPC」から「SPX」に変更したい。 reshapeパッケージでrename関数を試しましたが、変数名のみが変更されます。 「GSPC」オブジェクトには、ベクトルGSPC.Open、GSPC.Highなどがあります。「GSPC」の名前を「SPX」に変更して、GSPC.OpenをSPX.Openに変更することもできます。

22
Milktrader

オブジェクトとその中のcolnameの名前を変更するには、次の2つの手順を実行します。

SPY <- GSPC # assign the object to the new name (creates a copy)
colnames(SPY) <- gsub("GSPC", "SPY", colnames(SPY)) # rename the column names

それ以外の場合は、getSymbols関数を使用してnot自動割り当てできます。その場合、最初の手順をスキップできます(列の名前を変更する必要があります)。

SPY <- getSymbols("^GSPC", auto.assign=FALSE)

@ backlinからのコメント

Rは、いわゆる遅延評価を採用しています。その効果は、「コピー」するときにSPY <- GSPC実際にはSPYのメモリに新しいスペースを割り当てません。 Rはオブジェクトが同一であることを認識しており、そのうちの1つが変更された場合にのみメモリに新しいコピーを作成します(ieそれらが同一でなくなった場合egを変更した場合)次の行の列名)。それで

SPY <- GSPC
rm(GSPC)
colnames(SPY) <- gsub("GSPC", "SPY", colnames(SPY))

GSPCを実際にコピーするのではなく、単に新しい名前(SPY)を付けて、Rに名前(GSPC)を忘れるように伝えます。その後、列名を変更すると、SPYが存在しないため、GSPCの新しいコピーを作成する必要はありません。つまり、中間コピーを作成せずにオブジェクトの名前を本当に変更したことになります。

37
Shane