2015-10-29 1 views
8

私は属性としてdata.tableを持つR6クラスを持っています。のは、それは次のようになりましょう:どのようにR6クラスに角括弧で何をすべきか教えてください。

library(R6) 
library(data.table) 

foo <- R6Class(
    classname = 'foo', 
    public = list(
    dt = NA, 
    initialize = function(dt) { 
     self$dt <- dt 
    } 
) 
) 

set.seed(123) 
dt <- data.table(col1 = rnorm(10), col2 = rnorm(10)) 

bar <- foo$new(dt) 

私はそのようにしたいと思います:

bar[<data.table stuff>] 

は、この処理を行います。

bar$dt[<data.table stuff>] 

それは可能ですか?

答えて

8

あなたはそのためのS3クラスを使用することができます。

`[.foo` = function(x, ...) x$dt[...] 

bar[col1 > 0] 
#   col1  col2 
#1: 1.55870831 0.4007715 
#2: 0.07050839 0.1106827 
#3: 0.12928774 -0.5558411 
#4: 1.71506499 1.7869131 
#5: 0.46091621 0.4978505 
完璧に動作
+0

。ただし、Rstudioは列名を自動補完しませんが、それを回避する方法はありません。 – crf

+0

私はそれが好きです、私はちょうどそれを2〜3日前に使い始めました! :) – jangorecki

関連する問題