餡子付゛録゛

ソフトウェア開発ツールの便利な使い方を紹介。

Rでnames(x) <- "a name"的な代入を定義するには

今まで一度たりとも作る必要を感じたことがなく、言語定義を見ても特段何も書いていないようなので、関数呼び出しへの代入(?)はユーザー定義はでき無いのかなと思っていた*1のですが、ヘルプを見ていたら*2

The functions 'dim' and 'dim<-' are internal generic primitive functions.

などと書いてあって、dimとは別にdim<-と言う関数が別にあるように書かれています。実際、get("colnames")とget("colnames<-")をすると、二つで中身は異なります。
つまり、名前の末尾が<-にすれば関数呼び出しへの代入定義になるのかなと思って、

assign("example<-", function(x, value){
	2*value - x
})

と書いたら、

x <- 7
example(x) <- 3

とできました。xの値が-1になります。同時に、

4 -> example(x)

もできるようになります。ユーザー定義のS3/S4オブジェクトへの値の代入などに便利そうですが、見かけたことが無いような、覚えていないだけなような・・・

*1:か、読んだ説明を忘却していた

*2:なんでわざわざ調べているのかと言うと、プログラミング言語比較コラムで、RにできてJuliaにできないことの一つとして書いてあったので、ふと思い立ちました。