Что делает функция invisible ()?
R help объясняет invisible()
как «функцию, которая возвращает временно невидимую копию объекта». Мне трудно понять, для чего используется invisible()
. Сможете ли вы объяснить, что делает invisible()
, и когда эта функция может быть полезна?
Я видел, что invisible()
почти всегда используется в методах функций для print()
. Вот один пример:
### 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)
Я думал, что без invisible(x)
я не смог бы выполнить задание, например:
- Создать таблицу PDF
- Добавление текста в таблицу grid.table
- вставлять кавычки в строку символов, в цикле
- Использование '[' квадратная скобка как функция для lapply в R
- Вычислить разницу между значениями в последовательных строках по группам
a = print(x)
Но на самом деле это не так. Итак, я хотел бы знать, что делает invisible()
, где это может быть полезно, и, наконец, что это за роль в функции печати метода выше?
Большое спасибо за Вашу помощь.
- Объедините (rbind) кадры данных и создайте столбец с именем исходных кадров данных
- Изменение имени переменной в цикле for с использованием R
- Получить «встроенные nul (s), найденные во вводе» при чтении csv, используя read.csv ()
- Извлечь месяц и год из зоопарка :: объект yearmon
- poly () в lm (): разница между исходным и ортогональным
- Возьмите сумму переменной, если комбинация значений в двух других столбцах уникальна
- Добавить переменную в кадр данных, содержащий максимальное значение каждой строки
- найти все функции (включая частные) в пакете
От « ?invisible
:
Детали:
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.
Таким образом, вы можете назначить результат, но он не будет напечатан, если не назначен. Он часто используется вместо return
. Метод print.myPrint
печатает только потому, что вы явно вызываете print
. Призыв к invisible(x)
в конце вашей функции просто возвращает копию x
.
Если вы не использовали invisible
, x
также будет напечатан, если не назначен. Например:
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
Хотя invisible()
делает его контент временно невидимым и часто используется вместо return()
его следует использовать в сочетании с return()
а не как его замену.
В то время как return()
остановит выполнение функции и вернет введенное значение, invisible()
не сделает этого. Это делает его контент невидимым на некоторое время.
Рассмотрим следующие два примера:
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"
Если обойти invisible()
ловушку, мы можем взглянуть на ее работу:
f2(1)
Функция не выводит возвращаемое значение из-за использования invisible()
. Однако он передает значение как обычно :
res <- f2(1) res ## [1] "bigger than 0"
например, для предотвращения возвращаемых значений функции, которые создавали бы страницу за страницей вывода или когда вызывалась функция для ее побочного эффекта, а возвращаемое значение, например, используется только для получения дополнительной информации ...