【问题标题】:Returning copy of data.table from ReferenceClass method从 ReferenceClass 方法返回 data.table 的副本
【发布时间】:2013-05-15 13:11:16
【问题描述】:

我尝试从 ReferenceClass 的方法返回 data.tables 的副本:

dummy <- setRefClass(
  "dummy",
  fields = list(
    dt = "data.table"
  ),
  methods = list(
    initialize = function( df ){
      if( !missing( df ) ){
        dt <<- data.table( df , key = "a" )
      }
    },
    getTab = function( ix ){
      return( copy(dt[ ix, ]) )
    }
  )
)

但是,调用 dummy$getTab() 会产生一个我不明白的错误:

d <- dummy$new( data.frame( a = 1:10, b = 1:10 ) )
d$getTab( 2:5 )

Error in if (shallow) assign(field, get(field, envir = selfEnv), envir = vEnv) else { : 
  argument is not interpretable as logical
In addition: Warning message:
In if (shallow) assign(field, get(field, envir = selfEnv), envir = vEnv) else { :
 the condition has length > 1 and only the first element will be used

我不知道它的含义和来源。另外,以下两个程序可以正常工作:

copy( d$dt[ 2:5 ] )

mycopy <- function( dt, ix ) {
  return( copy(dt[ ix, ]) )
}
mycopy( d$dt, 2:5 )

感谢任何帮助。

【问题讨论】:

    标签: r data.table reference-class


    【解决方案1】:

    好的,抱歉,这是一个愚蠢的错误,我只是监督了envRefClass$copy() 的方法。所以解决办法是显式调用data.table::copy

    dummy <- setRefClass(
      "dummy",
      fields = list(
        dt = "data.table"
      ),
      methods = list(
        initialize = function( df ){
          if( !missing( df ) ){
            dt <<- data.table( df , key = "a" )
          }
        },
        getTab = function( ix ){
          return( data.table::copy(dt[ ix, ]) )
        }
      )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多