在data.tables中调用引用类方法:=

时间:2014-08-19 12:11:47

标签: r data.table reference-class

我在调用ReferenceClass个对象的方法时遇到问题,并通过引用data.table列(data.table版本1.9.3,R版本3.1)直接指定返回值最小的例子显示:

RF <- setRefClass(
  Class = "RF",
  methods = list(
    get = function() { "/foo/bar" }
  )
)
rf <- RF$new()

mdt <- data.table( x= c("a", "b"), y = 1:2 )
mdt[ , z := rf$get() ] # gives warning

> mdt$z
[[1]]
`$`

[[2]]
rf

mdt[ , rf$get() ]按预期工作,而mdt[ , list( z = rf$get()) ][ , z]也会产生奇怪的结果,mdt[ , unlist(list( z = rf$get())) ]会出错。

我不需要rf$get()之外评估mdt之类的解决方案,然后分配结果。我很想了解这里发生了什么,因为我正在大量使用data.tablesReferenceClasses,并希望能够将它们妥善使用。

1 个答案:

答案 0 :(得分:2)

感谢您提交此问题。现在已经修复in 1.9.5。来自NEWS

  

j - 现在(重新)正确构建DT[, col := x$y()](或)DT[, col := x[[1]]()]中的表达式。感谢@ ihaddad-md报道。关闭#774

您的代码会给出结果:

#    x y        z
# 1: a 1 /foo/bar
# 2: b 2 /foo/bar

没有任何警告。