Как вы, наверное, уже просматривали справочную страницу, использование ::
помогает получить доступ к конкретной функции из этого конкретного пакета. При загрузке dplyr
вы, вероятно, получили следующее сообщение ..
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
Так, например, если вы хотите использовать функцию intersect
из dplyr или базового пакета, вам нужно указать, используя ::
двойные двоеточия. Использование будет следующим
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
. В качестве альтернативы вы можете использовать, чтобы избежать загрузки полной библиотеки. В этом есть как положительные, так и отрицательные стороны. Прочтите ссылки и узнайте больше.
запустить и проверить отличия. Вот несколько ресурсов, которые помогут вам разобраться.
Сравнить библиотеки (), require (), ::
Пространство имен
person
user5249203
schedule
06.02.2016
?'::'
- person user20650   schedule 06.02.2016help("::")
также можно использовать, если?
доставляет вам неприятности. Функции всегда можно записывать в кавычки. - person Rich Scriven   schedule 06.02.2016