web-dev-qa-db-ja.com

Rの二重コロン(::)とは何ですか?

私はRbloggersのチュートリアルに従って、二重コロンの使用を見つけました、オンラインで見ましたが、それらの使用についての説明を見つけることができませんでした。以下に使用例を示します。

df <- dplyr::data_frame(
  year = c(2015, NA, NA, NA), 
  trt = c("A", NA, "B", NA)
)

データフレームを作成することは理解していますが、その目的はわかりません。

17
Luis Candanedo

おそらくヘルプページをご覧になったことがあると思いますが、::を使用すると、その特定のパッケージから正確な関数にアクセスできます。 dplyrをロードすると、おそらく次のようなメッセージが表示されます。

The following objects are masked from ‘package:base’:
       intersect, setdiff, setequal, union

したがって、たとえば、dplyrまたはベースパッケージのintersect関数を使用する場合は、::ダブルコロンを使用して指定する必要があります。使い方は次のようになります

mtcars$model <- rownames(mtcars)
first <- mtcars[1:20, ]
second <- mtcars[10:20, ]
dplyr::intersect(first, second)
base::intersect(first, second)

更新:追加の説明を追加

注:ライブラリーをロードする順序により、特定の機能の優先アクセスが決まります。異なるパッケージの開発者は、同じ関数名を使用する傾向があります。ただし、Rが関数を検出すると、特定のセッションがシーケンシャルにロードしたさまざまなライブラリを実行します。 (.packages())を実行すると、セッションでパッケージを確認できます

 [1] "tidyr"      "data.table" "dplyr"      "stats"     
 [5] "graphics"   "grDevices"  "utils"      "datasets"  
 [9] "methods"    "base"    

上記のサンプルセッションでわかるように、tidyrは最後にロードしたライブラリで、rセッションの最初のエントリです。したがって、コードで関数を使用する場合、最初にtidyr->で検索され、次にdata.table->、次にdplyrなどで検索され、最後にbaseパッケージが検索されます。したがって、このプロセスでは、パッケージ間で関数名が重複している場合、最後にロードしたパッケージが前のマスクをマスクします。このマスキングを回避するには、Rコードで関数を探す場所を指定します。したがって、ここでbase::intersectは、dplyrの代わりにベースライブラリの関数を使用します。または、完全なライブラリのロードを回避するために使用できます。これにはプラス面とマイナス面があります。リンクを読んで詳細をご覧ください。

実行して違いを確認します。理解を深めるためのリソースを次に示します。

library()、require()、:: と比較

ネームスペース

27
user5249203

複数のパッケージに同じ名前の関数が複数ある場合があります。二重コロン演算子を使用すると、特定の機能を指定できます。

package::functionname
10
CPhil