Я экспериментирую с классами S4 в R, и я пытался определить оператор (+
) для моих объектов, то есть перегрузить оператор плюс. Мне удалось перегрузить двоичный файл +
, но я не могу понять, как перегрузить унарный плюс. Вот минимальный рабочий (унарный оператор не работает) пример того, что я пытаюсь достичь:Унарный плюс для класса S4 в R
setClass("HWtest",
representation(expr = "character"),
prototype = list(expr = NA_character_)
)
H <- new("HWtest", expr="Hello")
W <- new("HWtest", expr="World")
setMethod("+", signature(e1="HWtest", e2="HWtest"),
function(e1,e2){
new("HWtest",
expr = paste([email protected]," + ",[email protected]))
}
)
Теперь я могу использовать оператор +
и работает гладко:
H+W
An object of class "HWtest"
Slot "expr":
[1] "Hello + World"
Теперь унарный плюс, конечно, не работает, так что должен быть перегружен
+H
Error in +H : invalid argument to unary operator
так что я попытался перегружать его следующим образом:
setMethod("+", signature(e="HWtest"),
function(e){
new("HWtest",
expr = paste("+ ",[email protected]))
}
)
Но это порождает ошибку:
Error in match.call(fun, fcall) :
argument 1 matches multiple formal arguments
Можно ли перегружать унарный плюс? Если да, то как мне это сделать для этого минимального примера?
Отлично! Спасибо, что решает мою проблему! – Gumeo
Я думаю, что '? SetMethod' также полезен, где объясняется, как указывать, что отсутствует аргумент arg, например' 'missing", что означает, что этот аргумент не должен появляться в вызове, чтобы соответствовать этой сигнатуре. ' – Frank
Ok this разъясняет это для меня! Большое спасибо парням :) – Gumeo