Если бы R полностью соответствовал S4, следующего было бы достаточно:
setMethod("+",
signature(e1 = "character", e2 = "character"),
function (e1, e2) {
paste(e1, e2, sep = "")
})
Но это дает ошибку, что метод запечатан: ((. Надеюсь, это изменится в версиях функции R.
Лучшее, что вы можете сделать, это определить новый класс "string", который будет вести себя точно так же, как класс "персонажа":
setClass("string", contains="character")
string <- function(obj) new("string", as.character(obj))
и определите наиболее общий метод, который позволяет R:
setMethod("+", signature(e1 = "character", e2 = "ANY"),
function (e1, e2) string(paste(e1, as.character(e2), sep = "")))
Теперь попробуйте:
tt <- string(44444)
tt
#An object of class "string"
#[1] "44444"
tt + 3434
#[1] "444443434"
"sfds" + tt
#[1] "sfds44444"
tt + tt
#[1] "4444444444"
343 + tt
#Error in 343 + tt : non-numeric argument to binary operator
"sdfs" + tt + "dfsd"
#An object of class "string"
#[1] "sdfs44444dfsd"