¿Qué hace la función invisible ()?

R help explica invisible() como “una función que devuelve una copia temporalmente invisible de un objeto”. Tengo dificultades para entender para qué se usa invisible() . ¿Sería capaz de explicar qué hace invisible() y cuándo esta función puede ser útil?

He visto que invisible() casi siempre se usa en las funciones de método para print() . Aquí hay un ejemplo:

 ### 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) 

Estaba pensando que sin invisible(x) , no podría hacer tareas como:

 a = print(x) 

Pero en realidad no es el caso. Entonces, me gustaría saber qué hace invisible() , dónde puede ser útil y, finalmente, cuál es su función en la función de impresión de métodos anterior.

Muchas gracias por su ayuda.

Desde ?invisible :

Detalles:

  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. 

Entonces puede asignar el resultado, pero no se imprimirá si no está asignado. A menudo se usa en lugar de return . Su método print.myPrint solo se imprime porque usted llama explícitamente a print . La llamada a invisible(x) al final de su función simplemente devuelve una copia de x .

Si no usó invisible , x también se imprimirá si no se asigna. Por ejemplo:

 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 

Mientras invisible() hace que su contenido sea temporalmente invisible y se use a menudo en lugar de return() , debería usarse en combinación con return() y no como reemplazo.

Mientras return() detendrá la ejecución de la función y devolverá el valor puesto en ella, invisible() no hará tal cosa. Solo hace que su contenido sea invisible por un tiempo.

Considere los siguientes dos ejemplos:

 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" 

Habiendo eludido la trampa invisible() , podemos echar un vistazo a su funcionamiento:

 f2(1) 

La función no imprime su valor de retorno debido al uso de invisible() . Sin embargo, transmite el valor de la forma habitual :

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

invisible() casos de uso de invisible() son, por ejemplo, para evitar valores de retorno de función que producirían página tras página de salida o cuando se solicita una función para su efecto secundario y el valor de retorno es, por ejemplo, utilizado únicamente para proporcionar más información ...