パッケージ内の setClass と setMethod をオーバーライドするのに問題があります
要件: R 3.0.1、Rtools
問題を再現する手順を以下に示します。
1. クラスとメソッドを作成する
setClass(Class="AAA",
representation(
name="character",
val="numeric"
)
)
setMethod("*",
signature(e1 = "numeric", e2 = "AAA"),
definition=function (e1, e2) {
e2@val = e2@val * e1
e2
}
)
2/ファイルを保存します
C:\AAA.r
3/ パッケージをビルドする
> setwd("C:")
> package.skeleton(name="AAA",code_files="C:\\AAA.r")
> system("R CMD build AAA")
> system("R CMD INSTALL --build AAA")
4/テスト
> library(AAA)
> x = new("AAA")
> x@val = 100
> -1 * x
An object of class "AAA"
Slot "name":
character(0)
Slot "val":
[1] -100
Slot "type":
character(0)
5/ クラスとメソッドをオーバーライドする
setClass(Class="AAA",
representation(
name="character",
val="numeric",
type="character",
desc="character"
)
)
setMethod("*",
signature(e1 = "numeric", e2 = "AAA"),
definition=function (e1, e2) {
if (e2@type == "double"){
e2@val = e2@val * (2 * e1)
} else {
e2@val = e2@val * e1
}
e2
}
)
6/テスト
> y = new("AAA")
> y@val=25
> y@type="double"
> -1 * y
Error in -1 * y : invalid object (non-function) used as method
お知らせ下さい