オブジェクトの名前変更に関するこの基本的な質問とそれに対する @Shane の回答を読み、遅延評価を指摘しました。assign
これも怠惰に評価されているのだろうか。ここのように:
assign("someNewName",someOldObject)
rm(someOldObject)
私がこれについて疑問に思う理由は、次の使用例です: それぞれが と という 2 つの属性を持つ 10,000 以上の R オブジェクトを取得したとoriginalName
しadditionalName
ます。ここで、これら 2 つの属性を失わずに、ユーザーがある名前から別の名前に効率的に切り替えることができる関数を作成したいと考えています。ざっくりこんな感じ…
編集: @Hadley の入力に基づいて、コードを変更しました。
switchObjectName <- function(x) {
n1 <- attributes(x)$originalName
n2 <- attributes(x)$additionalName
objName <- deparse(substitute(x))
if(objName == n1) {
delayedAssign(n2,x,assign.env=.GlobalEnv)
} else {
delayedAssign(n1,x,assign.env=.GlobalEnv)
}
rm(list=c(objName),envir=.GlobalEnv)
}
rm
これはうまくいきますが、ステートメントを正しくするのにかなり苦労しました。私は試みrm(objName,envir=.GlobalEnv)
ましたが、それを動作させることができませんでしたが、objName は間違いなく文字であり、deparse(substitute(x)
.