考虑以下功能
f1 <- function(x) {
# do something
x
}
f2 <- function(x) {
# do something
invisible(x)
}
假设我分别调用这两个函数并保存它们的值。
a <- f1(1)
b <- f2(2)
有没有办法知道a
和b
是否被无形归还?
我的动机是我要创建一个函数,如果一个值被无形地返回,函数也想要隐形地返回值。
答案 0 :(得分:8)
有withVisible
,可让您这样做:
> f3 = function(f, x){
v=withVisible(f(x))
if(v$visible){
return(v$value)
}else{
return(invisible(v$value))
}
}
> f3(f1,1)
[1] 1
> f3(f2,1)
一旦你有a
和b
,就无法做到这一点,因为identical(a,b)
是TRUE
。您只能在表达式上调用withVisible
。除非发生懒惰或妄想。
答案 1 :(得分:2)
Spacedman(适当的:-))解决方案的另一种可能替代方案是将以下行放入你的&#34;外部&#34;功能
if (grepl('invisible', body(inner_function) ) ) return(invisible(data)) else return(data)
显然,如果你做了一些创造性的事情,例如命名变量&#34; pinvisible&#34;