假设我有这样的:我该如何创建一个访问结构中的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。我怎样才能做到这一点?
假设我有这样的:我该如何创建一个访问结构中的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。我怎样才能做到这一点?
它可以完成,我不知道它应该完成。定义一个方法[
发送它的参数下到data.table是非常简单的:
`[.dt_test` <- function(x, ...){
x[[1]][...]
}
s[, sum(x), by = y]
你将不得不做,你想支持的所有泛型类似的东西,比如你可能也想定义[[
。
我宁愿建议直接引用列表中的data.table,就像Majo在他对你的问题的评论中所建议的那样。这样你就可以更容易地理解你的代码中真正发生的事情,让其他人可能正在阅读它(例如将来你)。
这对我来说看起来过于复杂。你知道'$ dt [,sum(x),by = y]'会给你结果吗? – Majo
是的,但我会对这样的对象进行很多操作,如果我不必每次都输入$ dt,那将非常方便。 – badmax
好的,只需检查:) Stefan Fs是否为您工作?并且只会包含一个df或多个? – Majo