В принципе, можно переписать каждый базовый оператор в R. Но сделать это настолько опасно, что я бы не советовал ни в коем случае.
Что вы должны сделать, это проверить тип ваших аргументов перед сравнением. Например, у вас есть такая функция:
f <- function(arg1, arg2, ...) {
#here you do some stuff
x <- something(arg1)
y <- someotherthing(arg1, arg2)
#here you are about to do the comparison
#but you check the arguments beforehand
if (typeof(x)!=typeof(y)) stop("Type mismatch")
#if there isn't any error you continue
z <- x > y
...
return(somevalue)
}
А как насчет опасного способа переопределения базового оператора? Вот оно:
`>`<-function(e1, e2) {
if (typeof(e1)!=typeof(e2) && (!is.numeric(e1) || !is.numeric(e2)) ) stop("Type mismatch")
basegt<-get(">",baseenv())
basegt(e1,e2)
}
'95'>90
#Error in "95" > 90 : Type mismatch
95>90
#[1] TRUE
Но, опять же, не пытайтесь делать это дома (и ни на работе в еще большей степени).