2015-10-29 23 views
8

Mam klasy R6, która ma jako atrybut data.table. Powiedzmy, że to wygląda tak:Jak powiedzieć klasie R6, co zrobić z nawiasami kwadratowymi?

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) 

Chciałbym, aby tak było, że:

bar[<data.table stuff>] 

robi to:

bar$dt[<data.table stuff>] 

Czy to możliwe?

Odpowiedz

8

Można użyć klasy S3 że:

`[.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

działa idealnie. Z wyjątkiem Rstudio nie autouzupełniania nazw kolumn, ale wątpię, aby to obejść. – crf

+0

Podoba mi się, właśnie zacząłem używać go 2-3 dni temu! :) – jangorecki