2

我正在使用以下方法声明一个类:

setRefClass("XLSXFile", 
    fields = list(
        wb= "workbook", 
        sheet= "character",
        at.line= "numeric"
    )
)

代码无法编译。我得到错误:

Error in .local(.Object, ...) : 
  argument "filename" is missing, with no default

由于这一行而产生错误:

        wb= "workbook",

如何在类中声明工作簿字段?解释器试图调用哪个函数需要文件名参数?我在 loadWorkbook 中猜到了,因为我使用的是 XLConnect,但是在声明类时如何提供参数?

4

1 回答 1

0

是的,貌似ref类实例是先创建为空的,即字段是通过调用默认构造函数来构造的,也就是说错误是由于:

new('workbook')
Error in .local(.Object, ...) : 
  argument "filename" is missing, with no default

您可以使用 ANY 类型:

XLSXFile <- setRefClass("XLSXFile", 
  fields = list(
    wb = "ANY",
    sheet= "character",
    at.line= "numeric"
  )
)

或者可能使用字段构造函数,使用这种方法:

XLSXFile <- setRefClass("XLSXFile", 
  fields = list(
    wb = function(x) { 
       message('workbook accessor/setter'); 
       # build or set the field
     },
    sheet= "character",
    at.line= "numeric"
  )
)
于 2013-11-06T17:20:17.523 回答