どこかに書いてあったかなぁ…
まぁ大体わかってるんだけど、一応確認してみる。
# クラスがaaやbbだったら内容にかかわらずaa, bbとそれぞれ表示する print.bb <- function(x) print("bb") print.aa <- function(x) print("aa") # まだ存在しない変数 x #> Error: object 'x' not found # classを与える前の挙動の確認 x <- 1 print(x) #> [1] 1 # class aa を与えてみる class(x) <- "aa" # 確認 x #> [1] "aa" # class bb を与えてみる class(x) <- "bb" x #> [1] "bb" # aaとbbをこの順で与えてみる。 class(x) <- c("aa", "bb") # 先に与えているclassの方の関数が呼ばれる(c()内の左側の要素) x #> [1] "aa" # ランダムに結果が変わったりしない。当たり前か x #> [1] "aa" # 逆順にしてみる class(x) <- c("bb", "aa") # やはり先に入っているbbの方が有効 x #> [1] "bb" # bbの方のprintを消してみる rm(print.bb) # 2番目のclassのaaの方のprintが呼ばれている x #> [1] "aa"
というわけで、基本的にはdata.frame
なんだけど、ある関数では別の挙動をしてほしいようなときには自作のクラス名を先頭につけ、対応する関数を作成しておく(当然、大元が総称関数となっていないといけないけど…)ということですね。
たまに基本的なことが不安になる…(ので確認していく)
追記
yutannihilationさんに教えていただきました。
このへんは第1版でも書いてると思います。Inheritanceあたり。 https://t.co/pX7Z4KzWJp
— Hiroaki Yutani (@yutannihilation) 2018年3月31日
そのものずばりが載ってる…!
一回読んだはずなのに…。やはり読んでわかった気になっているのは危ないですね…。 精進あるのみ💪
Enjoy!!