Quelles sont les fonctions de remplacement dans R?

J’ai cherché une référence pour en savoir plus sur les fonctions de remplacement dans R, mais je n’en ai pas encore trouvé. J’essaie de comprendre le concept des fonctions de remplacement dans R. J’ai le code ci-dessous mais je ne le comprends pas:

"cutoff<-"  value] <- Inf x } 

et puis on appelle coupure avec:

  cutoff(x) <- 65 

Quelqu’un pourrait-il expliquer ce qu’est une fonction de remplacement dans R?

Quand vous appelez

 cutoff(x) <- 65 

vous êtes en train d'appeler

 x <- "cutoff<-"(x = x, value = 65) 

Le nom de la fonction doit être cité car il s'agit d'un nom syntaxiquement valide mais non standard, et l'parsingur interpréterait <- comme l'opérateur non comme un élément du nom de la fonction s'il n'était pas cité.

"cutoff<-"() est comme toute autre fonction (mais avec un nom étrange); il modifie son argument d'entrée sur la base de la value (dans ce cas, il définit une valeur de x supérieure à 65 sur Inf (infini)).

La magie est vraiment faite quand vous appelez la fonction comme ça

 cutoff(x) <- 65 

parce que R parsing cela et extrait les différents bits pour faire l'appel réel ci-dessus.

Plus génériquement, nous avons

 FUN(obj) <- value 

R trouve la fonction "FUN<-"() et configure l'appel en passant obj et value à "FUN<-"() et organise le résultat de "FUN<-"() à obj , d'où appels:

 obj <- "FUN<-"(obj, value) 

Une référence utile pour cette information est la section R du Définition du langage R 3.4.4: Affectation de sous-ensemble ; la discussion est un peu oblique, mais semble être la référence la plus officielle (les fonctions de remplacement sont mentionnées en passant dans la FAQ R (différences entre R et S-PLUS) et dans la référence du langage R (divers problèmes techniques)), mais je n'ai trouvé aucune autre discussion dans la documentation officielle).

Gavin fournit une excellente discussion sur l’interprétation de la fonction de remplacement. Je voulais fournir une référence puisque vous avez également demandé cela: R Définition de la langue Section 3.4.4: Affectation de sous-ensemble .

Rappelez-vous, dans R tout, l’opération est un appel de fonction (donc aussi les opérations d’affectation) et tout ce qui existe est un object. Les fonctions de remplacement agissent comme si elles modifiaient leurs arguments comme dans

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

Ils ont l'identifiant <- à la fin de leur nom et renvoient une copie modifiée de l'object argument (fonctions de remplacement non primitives) ou le même object (fonctions de remplacement primitives)

À l'invite R, les éléments suivants ne fonctionneront pas:

 > `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<-" 

Comme vous pouvez le constater, R recherche l'environnement non pas pour la second mais pour la second<- . Faisons donc la même chose, mais en utilisant un tel identifiant de fonction à la place:

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

Maintenant, l'assignation à la deuxième position du vecteur fonctionne:

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

J'ai également écrit un script simple pour répertorier toutes les fonctions de remplacement dans le package de base R, trouvez-le ici .