【发布时间】:2021-08-28 21:09:08
【问题描述】:
quantmod 中的 Lag 函数可以接受一个向量,使其“k”个周期滞后(并输出一个矩阵或数组),但我找不到相应的方法来通过一个前瞻性函数来实现这一点——比如 Next()或铅()。
例如,
variable <- runif(5,1,30)
my.k <- c(2, 3)
Lag(variable, my.k)
returns:
Lag.2 Lag.3
[1,] NA NA
[2,] NA NA
[3,] 18.71971 NA
[4,] 10.98429 18.71971
[5,] 17.19299 10.98429
但是,quantmod 的 Lag 命令的倒数,即 Next() 命令,返回以下内容:
> variable <- runif(5,1,30)
> my.k <- c(2, 3)
> Next(variable, my.k)
Error in Next.numeric(variable, my.k) : k must be a non-negative integer
我试过包含 as.integer(my.k),但得到了同样的错误。我还通过 ?Lag 和 ?Next 查看了帮助说明。
我首先尝试了 dplyr 包中的 lag() 和 lead() 函数——但它们都需要一个“长度为 1 的正整数”来表示“领先或落后的位置数”,并提供以下信息尝试将 my.k 包含在其各自的 n 参数中时出错:
Error: `n` must be a nonnegative integer scalar, not a double vector of length 2.
问题:我如何在某些前瞻性函数中使用 my.k(我创建的向量)——比如 Next() 或 Lead()——就像我在 quantmod Lag 函数中使用它的方式一样?有没有简单的方法可以做到这一点?
【问题讨论】:
-
感谢两位的回答。我喜欢使用 collapse 包中的 'flag()' 的简单性。从功能开发的角度来看,是否有充分的理由说明“Next()”在矢量化方面与“Lag()”不一致?或者为什么 dplyr 中的“lead()”和“lag()”都不会提供矢量化的灵活性?