1

私はいくつかの時系列とそれらの特性を長い形式の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

このコードには2つの問題があります。

  1. 画面に印刷しy.tsz.ts;
  2. 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

データテーブル内でこのタイプの割り当てをサイレントにするにはどうすればよいですか?この使用は<<-正当化されていますか、それともこれを行うためのより良い方法がありますか?

4

1 に答える 1

2

<<-やや不透明であれば、正当化されます。

で何をするにしてもj、を使用していない限り、の結果を何かに:=割り当てないと、 評価対象の結果(これらの場合の引数の結果とそれぞれの結果)を出力することになります。DT[]`DT[]jy.tsz.ts

これらの呼び出しを非表示でラップするだけで、印刷されたり、結果が別のものになったりすることはありません。

インビジブルを使用する

# 
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)), by = dat][
  , z.ts <<- xts(sz, order.by = dat)])

jの何かに評価する(途中で割り当てる)

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 and x.ts to global environment)'
  }
]
DT[
  , list(sz = mean(z/x)), by = dat][
  , {z.ts <<- xts(sz, order.by = dat)
      'assigned x.ts'}]

その場合、結果は それぞれ'Assigned y.ts and x.ts to global environment)'とになり'assigned x.ts'ます。

于 2013-02-07T01:38:36.637 に答える