我正在使用长格式的 data.table 中的几个时间序列及其特征,我想利用该语法构造几种不同类型的xts
对象。data.table
这是我的想法:
一些初步数据
library(data.table)
set.seed(1)
DT <- data.table(
dat = as.Date("2013-01-01") + rep(1:5, 2),
a = c(1, -1),
x = i <- rnorm(10),
y = 2 * i + rnorm(10),
z = 3 * i + rnorm(10))
让(尝试)构建 3 个不同的时间序列
DT[a == 1,{
x.ts <- xts(x, order.by = dat)
y.ts <- xts(y, order.by = dat)
}]
DT[
, list(sz = mead(z/x)), by = dat][ # operate on columns of the datatable
, z.ts <- xts(sz, order.by = dat)] # construct xts
这段代码有两个问题:
- 它打印到屏幕
y.ts
和z.ts
; - 对象仅在
j
环境中而不是在全局环境中创建。
为了解决(2),可以命名全局环境中的对象并使用<<-
:
x.ts <- y.ts <- z.ts <- NA
DT[a == 1,{
x.ts <<- xts(x, order.by = dat)
y.ts <<- xts(y, order.by = dat)
}
]
DT[
, list(sz = mean(z/x)), by = dat][
, z.ts <<- xts(sz, order.by = dat)]
确实
> z.ts
[,1]
2013-01-02 2.300730
2013-01-03 4.969685
2013-01-04 1.959377
2013-01-05 1.961270
2013-01-06 3.256254
如何在数据表中使这种类型的分配保持沉默?这是<<-
合理的使用还是有更好的方法?