返回 Lag 输出时 Quantmod 覆盖列名是不是 bug

Is it a bug that Quantmod overwrites column names when returning Lag output

例如:

> col1<-Lag(c(1,2,3))
> col1
     Lag.1
[1,]    NA
[2,]     1
[3,]     2


> df<-data.frame(a=c(1,2,3))
> df$a<-Lag(df$a)
> df
  Lag.1
1    NA
2     1
3     2

请注意,headers 列是 Lag.1 而不是预期的 a

这不是 quantmod 或 Lag 特有的。这就是使用 data.frame 列 ($<-.data.frame) 进行替换的方式。如果用具有列名称的 1 列矩阵替换列,现有列将被删除并替换为新列。

例如:

df <- data.frame(a=1:3)
mat <- matrix(3:1, dimnames=list(NULL, "A"))
df$a <- mat

如果您不希望这种情况发生,您应该 drop 要用作替代品的对象的尺寸。

df <- data.frame(a=1:3)
df$a <- drop(Lag(df$a))