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 will encounter this in the next practica where you will need the **dplyr** package, this is because both the **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].