クラス (または実際には S4/S3 クラス) を参照するための機能的なユーザー インターフェイスを提供することの概念的な意味を理解しようとしています。要するに、以下のようなコードを書くと、関数型のコードを書いているのと同じになるのではないかという懸念があります。
以下は単純な線形回帰クラスです。
linRegClass = setRefClass('linRegClass',
fields = list(formulaReg = 'formula',
dataReg = 'data.frame'),
methods = list(doReg = function() {
lm(.self$formulaReg, data = .self$dataReg)
}))
linRegInstance = linRegClass$new(dataReg = cars,
formulaReg = as.formula(speed ~ dist))
linRegInstance$doReg()
class(linRegInstance)
オブジェクト指向のインターフェイスはあまりユーザー フレンドリーではないため、Martin Morgan のスライドのように、基になる参照クラスの機能的なユーザー インターフェイスを作成します。
fnLinReg = function(formulaReg, dataReg) {
linRegInstance = linRegClass$new(formulaReg = formulaReg,
dataReg = dataReg)
linRegInstance$doReg()
}
## use the functional interface
fnLinReg(dataReg = cars, formulaReg = as.formula(speed ~ dist))
現在、この機能的なインターフェースは、純粋に機能的なインターフェースと観察的に同等です
fnLinReg2 = function(formulaReg, dataReg) {
lm(formula = formulaReg, data = dataReg)
}
## use the pure function
fnLinReg2(dataReg = cars, formulaReg = as.formula(speed ~ dist))
これが私の例が病理学的に単純なためかどうかを理解しようとしていますが、参照クラスを作成して関数インターフェイスにラップすることと、純粋に機能的なコードを作成することに意味があるかどうかはまだ疑問です。
詳細な例は非常に役立ちます。