No. R consente solo di
- Ridefinire operatori esistenti (come
+
o, addirittura <-
),
- definire nuovi operatori infissi e racchiusi in
%…%
.
Queste sono le regole che dobbiamo giocare. Tuttavia, all'interno di queste regole tutto è giusto e giochi. Per esempio, siamo in grado di ridefinire +
per stringhe di caratteri per eseguire la concatenazione, senza distruggere il suo significato normale (aggiunta):
> `+`
function (e1, e2) .Primitive("+")
Questa è la vecchia definizione, che vogliamo preservare per i numeri:
> `+.default` = .Primitive('+')
> `+.character` = paste0
> `+` = function (e1, e2) UseMethod('+')
> 1 + 2
[1] 3
> 'hello' + 'world'
[1] "helloworld"
Questo sfrutta il sistema di classe S3 in R per rendere +
generico sul tipo del suo primo argomento.
L'elenco di operatori che possono essere ridefiniti è piuttosto eclettico. Al primo conteggio, contiene i seguenti operatori:
+
, -
, *
, /
, ^
, **
, &
, |
, :
, ::
, :::
, $
, $<-
, =
, <-
, <<-
, ==
, <
, <=
, >
, >=
, !=
, ~
, &&
, ||
, !
, ?
, ??
, @
, @<-
(Tratto da modules source code.)
Inoltre, è possibile ignorare ->
ridefinendo <-
.Questo mi sembra che sarebbe raramente senso - ma almeno un buon esempio di ciò esiste, per definire lambda meno verbose:
> sapply(1 : 4, x -> 2 * x)
[1] 2 4 6 8
Implementation as a gist
Anche se avete fatto uso '' >> come operatore, è può solo accedervi usando le virgolette o i backtick. E anche allora, raramente in un modo conveniente. Esempio: '\' >> \ '<- \'+\'; ">>" (4, 2) ' – A5C1D2H2I1M1N2O1R2T1
Sì: vedere' sos :: ??? 'o' cgwtools :: splatnd' per esempi, ma prestare attenzione a tutti gli avvisi forniti in le risposte e i commenti: –