2015-10-29 15 views
8

Ho una classe R6 che ha come attributo uno data.table. Diciamo che assomiglia a questo:Come faccio a dire a una classe R6 cosa fare con parentesi quadre?

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) 

Vorrei fare in modo che:

bar[<data.table stuff>] 

fa questo:

bar$dt[<data.table stuff>] 

E 'possibile?

risposta

8

è possibile utilizzare la classe S3 per questo:

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

funziona perfettamente. Tranne che Rstudio non completa automaticamente i nomi delle colonne, ma dubito che ci sia un modo per aggirare il problema. – crf

+0

Mi piace, ho appena iniziato a usarlo 2-3 giorni fa! :) – jangorecki

Problemi correlati