58

Rヘルプはinvisible()、「オブジェクトの一時的に非表示のコピーを返す関数」として説明しています。何invisible()に使われているのかわかりません。invisible()この機能がいつ何をするのか、いつ役立つのか説明していただけませんか?

これinvisible()は、ほとんどの場合、のメソッド関数で使用されることを確認しましたprint()。これが1つの例です:

### 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()するのか、それがどこで役立つのか、そして最後にそれが上記のメソッドprint関数でどのような役割を果たしているのか知りたいですか?

ご助力ありがとうございます。

4

3 に答える 3

39

差出人?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。関数の最後でtoを呼び出すとinvisible(x)、単に。のコピーが返されますx

を使用しなかった場合はinvisiblex割り当てられていない場合も印刷されます。例えば:

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 
于 2012-07-25T15:26:29.440 に答える
26

invisible()そのコンテンツを一時的に非表示にし、代わりに使用されることがよくありますが、代わりに使用するのでreturn()はなく、組み合わせて使用​​する必要がありreturn()ます。

return()関数の実行を停止し、そこに入力された値を返しますが、invisible()そのようなことはしません。コンテンツがしばらく見えなくなるだけです。

次の2つの例を検討してください。

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()のユースケースは、たとえば、出力のページごとにページを生成する関数の戻り値を防ぐため、または関数がその副作用のために呼び出され、戻り値がたとえば詳細情報を提供するためにのみ使用される場合です。

于 2016-08-11T20:15:25.923 に答える
2

Tidyverseデザインガイドブックからのこの抜粋は、目に見えない値を返すことがなぜ役立つのかを説明しています。

関数が主にその副作用のために呼び出された場合、それは目に見えない形で有用な出力を返すはずです。明らかな出力がない場合は、最初の引数を返します。これにより、パイプラインで関数を使用できるようになります。

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

于 2021-02-13T05:16:35.333 に答える