ジェネリックとメソッド

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

Richie Cotton

Data Evangelist at DataCamp

summary(c(TRUE, FALSE, NA, TRUE))
   Mode   FALSE    TRUE    NA's 
logical       1       2       1
summary(rgamma(1000, 1))
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
0.000354 0.276500 0.690300 1.020000 1.384000 9.664000
R における S3 と R6 を使ったオブジェクト指向プログラミング

 

 

 

関数オーバーロード = 入力に依存する

              関数の振る舞い

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

ch2_1-generics-and-methods.007.png

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

ch2_1-generics-and-methods.008.png

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

ch2_1-generics-and-methods.009.png

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

ch2_1-generics-and-methods.010.png

R における S3 と R6 を使ったオブジェクト指向プログラミング
print
function (x, ...) 
UseMethod("print")
<bytecode: 0x1062f0870>
<environment: namespace:base>
R における S3 と R6 を使ったオブジェクト指向プログラミング

メソッド名は generic.class 形式

  • print.Date
  • summary.factor
  • unique.array
R における S3 と R6 を使ったオブジェクト指向プログラミング

メソッドのシグネチャはジェネリックを含む

args(print)
function (x, ...) 
NULL
args(print.Date)
function (x, max = NULL, ...) 
NULL
R における S3 と R6 を使ったオブジェクト指向プログラミング

 

 

 

... でメソッド間に引数を受け渡す

ジェネリックと各メソッドの両方に含める

R における S3 と R6 を使ったオブジェクト指向プログラミング
print.function
function (x, useSource = TRUE, ...) 
.Internal(print.function(x, useSource, ...))
R における S3 と R6 を使ったオブジェクト指向プログラミング
print.Date
function (x, max = NULL, ...) 
{
    if (is.null(max)) 
        max <- getOption("max.print", 9999L)
    if (max < length(x)) {
        print(format(x[seq_len(max)]), max = max, ...)
        cat(" [ reached getOption(\"max.print\") -- omitted", 
            length(x) - max, "entries ]\n")
    }
    else print(format(x), max = max, ...)
    invisible(x)
}
R における S3 と R6 を使ったオブジェクト指向プログラミング

 

 

ch2_1-generics-and-methods.030.png

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

ch2_1-generics-and-methods.031.png

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

ch2_1-generics-and-methods.032.png

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

まとめ

  • 関数は「ジェネリック + メソッド」に分割
  • メソッド名は generic.class
  • メソッドの引数はジェネリックの引数を含む
  • ... を含める
  • lower_snake_case または lowerCamelCase を使用
R における S3 と R6 を使ったオブジェクト指向プログラミング

Passons à la pratique !

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

Preparing Video For Download...