Как уже упоминалось в комментарии log2
, log10
не входят в общий шаблон S3 Math
. Фактически, exp
, expm1
, log
, log10
, log2
и log1p
являются S4 универсальными и являются членами универсальной группы Math.
Один из способов реализовать то, что вы хотите сделать, - определить ваш класс как S4 .
setClass("lame4", slots = c(x = "numeric"))
И определить метод Math
универсальная группа:
setMethod("Math","lame4",function(x) {
x@x <- callGeneric(x@x)
x
})
## pretty print
setMethod("show", "lame4",function(object)print(object@x))
Теперь давайте проверим это:
l1 <- new("lame4",x=1:10)
Тогда:
log2(l1)
[1] 0.000000 1.000000 1.584963 2.000000 2.321928 2.584963 2.807355 3.000000 3.169925 3.321928
> log10(l1)
[1] 0.0000000 0.3010300 0.4771213 0.6020600 0.6989700 0.7781513 0.8450980 0.9030900 0.9542425
[10] 1.0000000
Это, конечно, не прямой ответ на ваш вопрос, но объясняет, почему ваша реализация не работает. Здесь я думаю, что использование S4
парадигмы - хорошая идея, потому что у вас будет более сильная типизация, что очень полезно для математики. Методы S4 также отлично работают с интерфейсом R.C / Rcpp. Но если вы новичок в этом, есть определенная кривая обучения (зависит от вашего опыта развития)