私はRbloggersのチュートリアルに従って、二重コロンの使用を見つけました、オンラインで見ましたが、それらの使用についての説明を見つけることができませんでした。以下に使用例を示します。
df <- dplyr::data_frame(
year = c(2015, NA, NA, NA),
trt = c("A", NA, "B", NA)
)
データフレームを作成することは理解していますが、その目的はわかりません。
おそらくヘルプページをご覧になったことがあると思いますが、::
を使用すると、その特定のパッケージから正確な関数にアクセスできます。 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
の代わりにベースライブラリの関数を使用します。または、完全なライブラリのロードを回避するために使用できます。これにはプラス面とマイナス面があります。リンクを読んで詳細をご覧ください。
実行して違いを確認します。理解を深めるためのリソースを次に示します。
複数のパッケージに同じ名前の関数が複数ある場合があります。二重コロン演算子を使用すると、特定の機能を指定できます。
package::functionname