2017-08-14 74 views
0

假设我有这样的:我该如何创建一个访问结构中的data.table的方法?

dt <- data.table(x = 1:10, y = 1:2) 
s <- structure(list(dt = dt), class = 'dt_test') 

我想定义一个[功能类dt_test的对象,这将传递它的参数dt的。因此,举例来说,我希望能够做到像

s[, sum(x), by = y] 
s[, z := x + y] 

其中[应用于dt。我怎样才能做到这一点?

+2

这对我来说看起来过于复杂。你知道'$ dt [,sum(x),by = y]'会给你结果吗? – Majo

+0

是的,但我会对这样的对象进行很多操作,如果我不必每次都输入$ dt,那将非常方便。 – badmax

+0

好的,只需检查:) Stefan Fs是否为您工作?并且只会包含一个df或多个? – Majo

回答

0

它可以完成,我不知道它应该完成。定义一个方法[发送它的参数下到data.table是非常简单的:

`[.dt_test` <- function(x, ...){ 
    x[[1]][...] 
} 

s[, sum(x), by = y] 

你将不得不做,你想支持的所有泛型类似的东西,比如你可能也想定义[[

我宁愿建议直接引用列表中的data.table,就像Majo在他对你的问题的评论中所建议的那样。这样你就可以更容易地理解你的代码中真正发生的事情,让其他人可能正在阅读它(例如将来你)。

+0

要带你不要做这个想法。这些都很容易混淆,并导致了非常不同的地方:'s badmax

+0

也许你可以调整函数有点处理这个问题,但它可能会变得尴尬处理data.table –

+0

时,通过参考设置的东西也许我可以但后来还会有什么其他问题弹出?我觉得最好放弃一些方便的安心。当我问这个问题时,我没有想到。 – badmax

相关问题