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",

クラスでワークブック フィールドを宣言するにはどうすればよいですか? ファイル名パラメーターを必要とする、インタープリターが呼び出そうとしている関数は何ですか? 私は XLConnect を使用しているので、loadWorkbook でそれを推測しますが、クラスを宣言するときにパラメーターを指定するにはどうすればよいですか?

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 に答える