私は C++ のバックグラウンドから来て、R6 パッケージを使用した R OOP プログラミングにそれを利用しようとしています。
大規模な OOP コードを記述するときは、次の典型的な状況を考慮してください。- いくつかの (場合によっては多くの) 関数を持つクラスがあり、それぞれが非常に複雑で、コード行が多い場合があります。
# file CTest.R
cTest <- R6Class(
"CTest",
public = list(
z = 10,
fDo1 = function() {
# very long and complex code goes here
self$z <- self$z*2; self$z
},
fDo2 = function() {
# another very long and complex code goes here
print(self)
}
)
) #"CTest"
CTest.R
当然のことながら、長くてさまざまな関数をすべて同じ ( ) ファイルに入れたくはありません。
C++ でプログラムする場合、そのようなコードをプログラムする通常の方法は次のとおりです。まず、ファイルで関数を宣言し.h
、次に.c
複雑な関数ごとにファイルを作成し、そこで関数を定義します。これにより、効率的なソース管理を含め、共同でコードを書くことが可能になります。
だから、私は R で似たようなことをしようとしました: 最初に、上記のコードのように関数を宣言し、次に「実際の長くて複雑な」コードを後でそれに割り当てようとしました (後で別ファイルCTest-Do1.R
):
cTest$f <- function() {
self$z <- self$z*100000; self$z
}
今、私はそれが動作するかどうかをテストします:
> tt <- cTest$new(); tt; tt$fDo1(); tt
<CTest>
Public:
clone: function (deep = FALSE)
fDo1: function ()
fDo2: function ()
z: 10
[1] 20
<CTest>
Public:
clone: function (deep = FALSE)
fDo1: function ()
fDo2: function ()
z: 20
いいえ、違います。- 上記の出力からわかるように、関数は変更されていません。
何かアドバイス?