Once you start becoming more of an R expert user, you will likely need
to load several add-on packages for some of your analysis. Once you
start doing this, it is likely that two packages use the same name for
two different functions. And often these functions do completely
different things. In fact, you have already encountered this because
both dplyr and the R-base stats package define a filter
function. There are five other examples in dplyr. We know this
because when we first load dplyr we see the following message:
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
So what does R do when we type filter
? Does it use the dplyr
function or the stats function? From our previous work we know it
uses the dplyr one. But what if we want to use the stats
version?
These functions live in different namespaces. R will follow a certain order when searching for a function in these namespaces. You can see the order by typing:
search()
The first entry in this list is the global environment which includes all the objects you define.
So what if we want to use the stats filter
instead of the
dplyr filter but dplyr appears first in the search list? You can
force the use of a specific namespace by using double colons (::
) like
this:
stats::filter
If we want to be absolutely sure that we use the dplyr filter
, we
can use
dplyr::filter
Also note that if we want to use a function in a package without loading the entire package, we can use the double colon as well.
For more on this more advanced topic we recommend the R packages book[16].