我想它与那个故事有关:在加载dplyr包时改变stats :: lag的行为,但是lag当我尝试使用该default =选项时,我发现了一些奇怪的函数行为.
检查下面的简单命令
library(dplyr)
df = data.frame(mtcars)
df %>% mutate(lag_cyl = lag(cyl))
## it works with NA in first value (as expected)
df %>% mutate(lag_cyl = lag(cyl, default = 999))
## it works with a given value as default
df %>% mutate(lag_cyl = lag(cyl, default = cyl[1]))
## it DOESN'T WORK with the first value of the column as default
df %>% mutate(lag_cyl = dplyr::lag(cyl, default = cyl[1]))
## it works when specifying dplyr::
val = df$cyl[1]
df %>% mutate(lag_cyl = lag(cyl, default = val))
## it works when I assign the first value of the column to a variable name
Run Code Online (Sandbox Code Playgroud)
这只是stats和dplyr包之间的冲突吗?
我可以确认它df %>% mutate(lag_cyl = lag(cyl, default = cyl[1]))适用于 dplyr 版本 0.8.0.1。
如果它在指定时起作用,dplyr::lag则表明另一个库正在屏蔽该函数。Hmisc 有一个名为 lag 的函数,您可能在加载 dplyr 后加载了该库(或另一个具有 lag 函数的库)。