2017-12-20 16 views
1

このパッケージ(darksky、ここにある:https://github.com/hrbrmstr/darksky)の仕組みを理解しようとしています。パッケージ内の関数は同じサブ関数を共有しますか?

それはRフォルダ内のこれら2つのスクリプトが含まれています

  1. aaa.R、および
  2. get-current-forecast.R

aaa.R)旧convert_timeと呼ばれるサブ関数が含まれています。これは後者(get-current-forecast.R)によって呼び出されているようですが、はインポートされません/ get-current-forecast.Rによってrefferredです。

これはどのように機能しますか?すべてのサブ関数を同じパッケージ内の他の関数で使用できますか?

+2

パッケージは、インタラクティブセッションでRファイルを入手するのと同じ働きをしません。パッケージ内のすべての.Rファイルに定義されているすべての関数はパッケージの名前空間に登録され、 'library(foo)'を実行すると添付されます。したがって、パッケージ内のある関数が他の関数を呼び出すと、Rはその名前の関数のためにそのパッケージの名前空間を探します。 – joran

+0

ありがとう、私はそれを知らなかった。したがって、基本的にすべてのサブ関数は、パッケージがロードされるたびに使用可能です。おそらく関数内でサブ関数を定義するときには少し注意するべきでしょう。 – Gautam

+2

別の関数内で定義された関数は異なります。 Rはパッケージネームスペース内のものを見たり登録したりしません。これらの関数は、囲み関数内でのみ使用できます。 – joran

答えて

2

パッケージは、インタラクティブセッションでRファイルをソーシングするのと同じ働きをしません。パッケージ内のすべての.Rファイルに定義されているすべての関数は、パッケージのネームスペースに登録され、library(foo)を実行すると添付されます。したがって、パッケージ内のある関数が他の関数を呼び出すと、Rはその名前の関数のためにそのパッケージの名前空間を探します。

しかし、別の関数内で定義された関数は異なります。 Rはパッケージネームスペース内のものを見たり登録したりしません。これらの関数は、囲み関数内でのみ使用できます。 fooがパッケージの一部の.Rファイルで定義された場合、例えば

foo <- function(x){ 
    y <- x+1 
    bar <- function(z){ 
    z+1 
    } 

    bar(y) 
} 

、機能fooは可視であろうが、barのみfoo内見えるであろう。

関連する問題