首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数invisible()做了什么?

函数invisible()做了什么?
EN

Stack Overflow用户
提问于 2012-07-25 23:22:53
回答 3查看 25.7K关注 0票数 56

R help将invisible()解释为“一个返回暂时不可见的对象副本的函数”。我很难理解invisible()是用来干什么的。您能解释一下invisible()是做什么的吗?什么时候可以使用这个功能?

我已经看到,在print()的方法函数中几乎总是使用invisible()。这里有一个例子:

代码语言:javascript
复制
### 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),我就不能做这样的任务:

代码语言:javascript
复制
a = print(x)

但事实并非如此。所以,我想知道invisible()做了什么,它可以在哪里有用,最后它在上面的方法打印函数中的作用是什么?

非常感谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-25 23:26:29

来自?invisible

详细信息:

当需要让函数返回可以赋值但未赋值时不打印的值时,此函数非常有用。

因此,您可以分配结果,但如果不分配,则不会打印结果。它通常用来代替return。因为您显式调用了print,所以您的print.myPrint方法才会打印。在函数末尾对invisible(x)的调用只是返回x的一个副本。

如果你没有使用invisible,如果没有赋值,x也会被打印。例如:

代码语言:javascript
复制
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 
票数 38
EN

Stack Overflow用户

发布于 2016-08-12 04:15:26

虽然invisible()使其内容暂时不可见,并且经常被用来代替return(),但它应该与return()结合使用,而不是作为它的替代品。

虽然 invisible() 会停止函数执行并返回输入的值,但它不会这样做。它只会让其内容在一段时间内不可见。

考虑以下两个示例:

代码语言:javascript
复制
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()的陷阱之后,我们可以看看它的工作原理:

代码语言:javascript
复制
f2(1)

由于使用了invisible()**. ,函数不会打印其返回值但是,它会像往常一样传递值**:

代码语言:javascript
复制
res <- f2(1)
res 
## [1] "bigger than 0"

例如,invisible()的用例是防止函数返回值产生一页又一页的输出,或者当一个函数因其副作用而被调用时,例如,返回值仅用于提供进一步的信息...

票数 26
EN

Stack Overflow用户

发布于 2021-02-13 13:16:35

本文摘自Tidyverse Design Guide一书,解释了为什么返回不可见的值可能很有用。

如果调用一个函数主要是为了它的副作用,那么它应该以不可见的方式返回一个有用的输出。如果没有明显的输出,则返回第一个参数。这使得在管道中使用函数和成为可能。

https://design.tidyverse.org/out-invisible.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11653127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档