R help将invisible()解释为“一个返回暂时不可见的对象副本的函数”。我很难理解invisible()是用来干什么的。您能解释一下invisible()是做什么的吗?什么时候可以使用这个功能?
我已经看到,在print()的方法函数中几乎总是使用invisible()。这里有一个例子:
### 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),我就不能做这样的任务:
a = print(x)但事实并非如此。所以,我想知道invisible()做了什么,它可以在哪里有用,最后它在上面的方法打印函数中的作用是什么?
非常感谢你的帮助。
发布于 2012-07-25 23:26:29
来自?invisible
详细信息:
当需要让函数返回可以赋值但未赋值时不打印的值时,此函数非常有用。
因此,您可以分配结果,但如果不分配,则不会打印结果。它通常用来代替return。因为您显式调用了print,所以您的print.myPrint方法才会打印。在函数末尾对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 发布于 2016-08-12 04:15:26
虽然invisible()使其内容暂时不可见,并且经常被用来代替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"例如,invisible()的用例是防止函数返回值产生一页又一页的输出,或者当一个函数因其副作用而被调用时,例如,返回值仅用于提供进一步的信息...
发布于 2021-02-13 13:16:35
本文摘自Tidyverse Design Guide一书,解释了为什么返回不可见的值可能很有用。
如果调用一个函数主要是为了它的副作用,那么它应该以不可见的方式返回一个有用的输出。如果没有明显的输出,则返回第一个参数。这使得在管道中使用函数和成为可能。
https://stackoverflow.com/questions/11653127
复制相似问题