Hi,

It shouldn't be entirely unexpected: when I load dplyr, I get a series
of messages telling me that certain functions are masked.


The following object is masked from ‘package:plm’:

    between

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union


You can see the search path that R uses when looking for a function or
other object here:

In your example, it should look like this:

> search()
 [1] ".GlobalEnv"        "package:dplyr"     "package:plm"
"package:Formula"
 [5] "package:stats"     "package:graphics"  "package:grDevices"
"package:utils"
 [9] "package:datasets"  "package:vimcom"    "package:setwidth"
"package:colorout"
[13] "package:methods"   "Autoloads"         "package:base"


So R is searching the local environment, then dplyr, and then farther
down the list, stats, which is where the lag function comes from (see
above warning).

Once you know where the desired function comes from you can specify
its namespace:


summary(plm(y~lagx, data = df, index = c("i", "t")))
summary(plm(y~stats::lag(x, 1), data = df, index = c("i", "t")))

If you weren't paying attention to the warning messages at package
load, you can also use the getAnywhere function to find out:

> getAnywhere(lag)
2 differing objects matching ‘lag’ were found
in the following places
  package:dplyr
  package:stats
  namespace:dplyr
  namespace:stats


Sarah


On Tue, Nov 29, 2016 at 9:36 AM, Constantin Weiser <weis...@hhu.de> wrote:
> Hello,
>
> I'm struggling with an unexpected interference between the two packages
> dplyr and plm, or to be more concrete with the "lag(x, ...)" function of
> both packages.
>
> If dplyr is in the namespace the plm function uses no longer the appropriate
> lag()-function which accounts for the panel structure.
>
> The following code demonstrates the unexpected behaviour:
>
> ## starting from a new R-Session (plm and dplyr unloaded) ##
>
>   ## generate dataset
>   set.seed(4711)
>   df <- data.frame(
>           i = rep(1:10, each = 4),
>           t = rep(1:4, times = 10),
>           y = rnorm(40),
>           x = rnorm(40)
>   )
>   ## manually generated laged variable
>   df$lagx <- c(NA, df$x[-40])
>   df$lagx[df$t == 1] <- NA
>
>
> require(plm)
> summary(plm(y~lagx, data = df, index = c("i", "t")))
> summary(plm(y~lag(x, 1), data = df, index = c("i", "t")))
> # > this result is expected
>
> require(dplyr)
> summary(plm(y~lagx, data = df, index = c("i", "t")))
> summary(plm(y~lag(x, 1), data = df, index = c("i", "t")))
> # > this result is unexpected
>
> Is there a way to force R to use the "correct" lag-function? (or at the
> devel-level to harmonise both functions)
>
> Thank you very much in advance for your answer
>
> Yours
> Constantin
>
> --
> ^

-- 
Sarah Goslee
http://www.functionaldiversity.org

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to