51

Rの置換関数について学ぶためのリファレンスを検索しましたが、まだ見つかりません。Rの置換関数の概念を理解しようとしています。以下のコードがありますが、理解できません。

"cutoff<-" <- function(x, value){
 x[x > value] <- Inf
 x
 }

次に、カットオフを次のように呼び出します。

 cutoff(x) <- 65

誰かがRの置換関数が何であるかを説明できますか?

4

4 に答える 4

10

Gavin は、置換関数の解釈について優れた議論を提供しています。R Language Definition Section 3.4.4: Subset assignmentも要求されたので、参照を提供したいと思いました。

于 2012-07-19T16:54:13.700 に答える
3

R では、すべての操作が関数呼び出し (したがって代入操作も) であり、存在するものはすべてオブジェクトであることを思い出してください。置換関数は、次のように引数をその場で変更するかのように機能します

colnames(d) <- c("Input", "Output")

<-名前の末尾に識別子があり、引数オブジェクトの変更されたコピー (非プリミティブ置換関数) または同じオブジェクト (プリミティブ置換関数) を返します。

R プロンプトでは、以下は機能しません。

> `second` <- function(x, value) {
+   x[2] <- value
+   x
+ }
> x <- 1:10
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> second(x) <- 9
Error in second(x) <- 9: couldn't find function "second<-"

ご覧のとおり、R は環境を検索しているのではなく、 を検索していsecondますsecond<-。同じことを行いましょうが、代わりにそのような関数識別子を使用します。

> `second<-` <- function(x, value) {
+   x[2] <- value
+   x
+ }

これで、ベクトルの 2 番目の位置での割り当てが機能します。

> second(x) <- 9
> x
 [1]  1  9  3  4  5  6  7  8  9 10

また、R ベース パッケージのすべての置換関数を一覧表示する簡単なスクリプトも作成しました。こちらを参照してください

于 2016-05-07T19:45:41.607 に答える