クラスが多すぎる

R における S3 と R6 を使ったオブジェクト指向プログラミング

Richie Cotton

Data Evangelist at DataCamp

x <- c(1, 3, 6, 10, 15)

class(x) <- c( "triangular_numbers", "natural_numbers", "numeric" )
R における S3 と R6 を使ったオブジェクト指向プログラミング
is.numeric(x)
TRUE
is.triangular_numbers(x)
Error: could not find function "is.triangular_numbers"
R における S3 と R6 を使ったオブジェクト指向プログラミング
inherits(x, "triangular_numbers")
TRUE
inherits(x, "natural_numbers")
TRUE
inherits(x, "numeric")
TRUE
R における S3 と R6 を使ったオブジェクト指向プログラミング
what_am_i <- function(x, ...) {
  UseMethod("what_am_i")
}
R における S3 と R6 を使ったオブジェクト指向プログラミング
what_am_i.triangular_numbers <- function(x, ...) {
  message("私は三角数です")
  NextMethod("what_am_i")
}
what_am_i.natural_numbers <- function(x, ...) {
  message("私は自然数です")
  NextMethod("what_am_i")
}
what_am_i.numeric <- function(x, ...) {
  message("私は数値です")
}
R における S3 と R6 を使ったオブジェクト指向プログラミング
what_am_i(x)
私は三角数です
私は自然数です
私は数値です

ch2_4-too-much-class.017.png

R における S3 と R6 を使ったオブジェクト指向プログラミング
what_am_i(x)
私は三角数です
私は自然数です
私は数値です

ch2_4-too-much-class.018.png

R における S3 と R6 を使ったオブジェクト指向プログラミング
what_am_i(x)
私は三角数です
私は自然数です
私は数値です

ch2_4-too-much-class.019.png

R における S3 と R6 を使ったオブジェクト指向プログラミング
what_am_i(x)
私は三角数です
私は自然数です
私は数値です

ch2_4-too-much-class.020.png

R における S3 と R6 を使ったオブジェクト指向プログラミング

まとめ

  • クラスは複数可
  • 任意のクラス確認には inherits()
  • メソッドを連鎖するには NextMethod()
R における S3 と R6 を使ったオブジェクト指向プログラミング

Ayo berlatih!

R における S3 と R6 を使ったオブジェクト指向プログラミング

Preparing Video For Download...