1. ホーム
  2. r

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

2022-02-26 04:41:11

質問

Yahooから金融シリーズのデータを取り込むためにquantmodパッケージを使っています。

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

オブジェクト名 "GSPC" を "SPX" に変更したいのですが、どうすればよいでしょうか?reshapeパッケージのrename機能を試しましたが、変数名しか変更されません。"GSPC"オブジェクトは、ベクターGSPC.Open、GSPC.Highなどを持っています。GSPC"を"SPX"にリネームして、GSPC.OpenをSPX.Openなどに変更したいのですが、可能でしょうか?

どうすればいいですか?

オブジェクトとその中のコルネームのリネームは、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関数で ない この場合、最初のステップは省略できます (カラムの名前は変更する必要があります)。

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


バックリンさんからのコメント

Rは、いわゆる 遅延評価 . その効果として、 "コピー"するときに。 SPY <- GSPC に対して新しい領域を確保するわけではありません。 SPY . R はこれらのオブジェクトが同一であることを知っており、どちらかが変更された場合にのみ、メモリ内に新しいコピーを作成します ( すなわち というのは、同一でなくなったときです。 など 次の行でカラム名を変更したとき)。そこで、次のようにすることで

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

コピーすることはない GSPC という名前をつけるだけで、単に新しい名前 ( SPY )、そしてRに最初の名前を忘れるように指示し ( GSPC ). その後、列名を変更する際には、新しい SPY というのは GSPC はもう存在しないので、中間コピーを作成することなく、オブジェクトの名前を本当に変更したことを意味します。