私は現在、複数の方法で初期化できるRでR6 classをビルドする必要があるプロジェクトに取り組んでいます。私はそれについて最善の方法があると思っています。 $new()
の機能を過負荷にすることは可能ですか?あるいは、ヘルパー関数を定義する必要がありますか?動機例としてR:R6クラスのコンストラクタを複数定義する方法は?
:私はベクトルvariable_names
または整数n_variables
のいずれかを使用して使用して初期化することができるフィールドnames
とR6クラスMyClass
のための2つのコンストラクタを持ちたい(その場合には、名前のデフォルトのベクトルを初期化します) 。
機能は次のように動作するはずです:
#define the class (only has a constructor that accepts a vector of names)
myClass <- R6Class("myClass",
public = list(
names = NA,
initialize = function(names) {
if (!missing(names)) self$names <- names
})
)
#create a test object using a vector of names
variable_names = c("x","y")
a = myClass$new(variable_names)
a$names
#> [1] "x y"
#everything after here does not actually work (just to illustrate functionality)
n_variables = 2;
b = myClass$new(n_variables)
b$names
#> [1] "v1 v2"
は私がIntroductory vignette,て見ていたが、これを行うための明確な方法があるようには思えません。
理想的には、引数に名前を付ける必要がない(つまり、私はmyClass$new(names=variable_names)
のような何かをする必要がない)、入力が有効であることを簡単にチェックできる解決策を探しています。
を与えますか? –
@ 42-申し訳ありませんが、私はその提案に少し混乱しています。それはどのように機能しますか? –
私はちょうどここで非常によく似た質問に答えましたhttps://stackoverflow.com/questions/35881234/ –