r - Global silent assignments from within a data.table -
i working several time series , characteristic in data.table in long format , build several different types of xts
object exploiting data.table
syntax. here have in mind:
some preliminary data
library(data.table) set.seed(1) dt <- data.table( dat = as.date("2013-01-01") + rep(1:5, 2), = c(1, -1), x = <- rnorm(10), y = 2 * + rnorm(10), z = 3 * + rnorm(10))
lets (try to) build 3 different time series
dt[a == 1,{ x.ts <- xts(x, order.by = dat) y.ts <- xts(y, order.by = dat) }] dt[ , list(sz = mead(z/x)), = dat][ # operate on columns of datatable , z.ts <- xts(sz, order.by = dat)] # build xts
this code has 2 problems:
it prints screeny.ts
, z.ts
; the objects created in j
environment not in global environment. to solve (2), 1 can name objects in global enviroment , utilize <<-
:
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)), = dat][ , z.ts <<- xts(sz, order.by = dat)]
and indeed
> 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
how can create type of assignment within info table silent? utilize of <<-
justified or there improve way of doing this?
<<-
justifiable, if opaque.
whatever in j
, unless using :=
, if don't assign result of dt[]
something, end printing result of `dt[]
evaluates (the result of j
argument in these cases y.ts
, z.ts
, respectively.
just wrap these calls in invisible, , won't print, or create outcome else
using invisible
# x.ts <- y.ts <- z.ts <- na invisible(dt[a == 1,{ x.ts <<- xts(x, order.by = dat) y.ts <<- xts(y, order.by = dat) } ]) invisible(dt[ , list(sz = mean(z/x)), = dat][ , z.ts <<- xts(sz, order.by = dat)])
evaulating j
else (assigning along way)
x.ts <- y.ts <- z.ts <- na dt[a == 1,{ x.ts <<- xts(x, order.by = dat) y.ts <<- xts(y, order.by = dat) 'assigned y.ts , x.ts global environment)' } ] dt[ , list(sz = mean(z/x)), = dat][ , {z.ts <<- xts(sz, order.by = dat) 'assigned x.ts'}]
in case results 'assigned y.ts , x.ts global environment)'
, 'assigned x.ts'
respectively.
r data.table xts
No comments:
Post a Comment