Que fait la fonction invisible ()?

R help explique invisible() comme “une fonction qui retourne une copie temporairement invisible d’un object”. J’ai de la difficulté à comprendre à quoi sert invisible() . Seriez-vous capable d’expliquer ce que invisible() fait et quand cette fonction peut être utile?

J’ai vu invisible() est presque toujours utilisé dans les fonctions de méthode pour print() . Voici un exemple:

 ### My Method function: print.myPrint <- function(x, ...){ print(unlist(x[1:2])) invisible(x) } x = list(v1 = c(1:5), v2 = c(-1:-5) ) class(x) = "myPrint" print(x) 

Je pensais que sans invisible(x) , je ne serais pas capable de faire l’affectation comme:

 a = print(x) 

Mais ce n’est en fait pas le cas. Donc, j’aimerais savoir ce que invisible() fait, où il peut être utile, et enfin quel est son rôle dans la fonction d’impression de la méthode ci-dessus?

Merci beaucoup pour votre aide.

De ?invisible :

Détails:

  This function can be useful when it is desired to have functions return values which can be assigned, but which do not print when they are not assigned. 

Vous pouvez donc atsortingbuer le résultat, mais il ne sera pas imprimé s’il n’est pas atsortingbué. Il est souvent utilisé à la place du return . Votre méthode print.myPrint imprime uniquement parce que vous appelez explicitement print . L’appel à invisible(x) à la fin de votre fonction renvoie simplement une copie de x .

Si vous n’utilisiez pas invisible , x serait également imprimé s’il n’est pas atsortingbué. Par exemple:

 R> print.myPrint <- function(x, ...){ + print(unlist(x[1:2])) + return(x) + } R> print(x) v11 v12 v13 v14 v15 v21 v22 v23 v24 v25 1 2 3 4 5 -1 -2 -3 -4 -5 v11 v12 v13 v14 v15 v21 v22 v23 v24 v25 1 2 3 4 5 -1 -2 -3 -4 -5 

Alors invisible() rend son contenu temporaire invisible et est souvent utilisé à la place de return() il devrait plutôt être utilisé en combinaison avec return() et non en remplacement.

Bien que return() arrête l’exécution de la fonction et renvoie la valeur, invisible() ne fera rien de tel. Il ne fait que rendre son contenu invisible pendant un moment.

Considérons les deux exemples suivants:

 f1 <- function(x){ if( x > 0 ){ invisible("bigger than 0") }else{ return("negative number") } "something went wrong" } result <- f1(1) result ## [1] "something went wrong" f2 <- function(x){ if( x > 0 ){ return(invisible("bigger than 0")) }else{ return("negative number") } } result <- f2(1) result ## [1] "bigger than 0" 

Après avoir contourné le piège de invisible() , nous pouvons examiner son fonctionnement:

 f2(1) 

La fonction n'imprime pas sa valeur de retour à cause de l'utilisation de invisible() . Il transmet toutefois la valeur habituelle :

 res <- f2(1) res ## [1] "bigger than 0" 

Les cas d'utilisation de invisible() sont par exemple d'empêcher les valeurs de retour de fonction qui produiraient page après page de sortie ou lorsqu'une fonction est appelée pour ses effets secondaires et que la valeur de retour est utilisée pour donner des informations supplémentaires ...