data.table和R的省略号(即'...'):通过引用传递似乎不起作用

时间:2015-05-12 09:53:15

标签: r data.table

我试图以一种特殊的方式操纵一个大数据表(~37 MB):由于其他(无关)原因,我实现了一个'hook'结构意味着整个过程就像

1)从磁盘加载data.table

2)开火某个钩子

3)钩子结构查找此名称并检查用户(= me :))是否已将函数绑定到此钩子,如果是,则调用它

4)进一步处理数据

函数看起来像这样:

data = readRDS(pathToFile)
data = data.table(data)
fireHook("After_data_read", data, [some other parameters])
some_more_processing(data)

和fireHook周围的区域看起来像

hooksRegistered = list(
  "After_data_read" = function(data, ...) { 
                        # do some stuff 
                      }


)

fireHook = function(hookName, ...) {
  for (hookNameRegistered in names(hooksRegistered)) {
    if (hookName == hookNameRegistered) {
      func = .global.hooksRegistered[[hookName]]
      func(hookName, ...)
    }
  }
}

观察一个人需要将已经 一个data.table的对象再次投射到其中(否则传递引用不起作用),请参阅Adding new columns to a data.table by-reference within a function not always working和{{ 3}}

问题:这一行:func(hookName, ...)需要永远(> 5分钟)。

调试器从来没有真正进入函数(所以它不是函数中的代码需要很长时间)而且我用小data.tables测试它并且它有效。此外,我注意到以下似乎有效:

fireHook = function(hookName, ...) {
  args = list(...)
  for (hookNameRegistered in names(.global.hooksRegistered)) {
    if (hookName == hookNameRegistered) {
      func = .global.hooksRegistered[[hookName]]
      func(hookName, args)
    }
  }
}

(注意我用...替换了list(...))。对我来说,似乎R在使用...时试图复制整个表格。这是对的吗?或者我使用它错了吗?

的问候,

FW

0 个答案:

没有答案