R supporta la funzione di sovraccarico ??R - Sovraccarico funzione
voglio fare qualcosa nelle linee di:
g <- function(X,Y) { # do something and return something }
g <- function(X) { # do something and return something}
R supporta la funzione di sovraccarico ??R - Sovraccarico funzione
voglio fare qualcosa nelle linee di:
g <- function(X,Y) { # do something and return something }
g <- function(X) { # do something and return something}
EDIT, dopo un chiarimento della questione nei commenti sopra:
Da una rapida occhiata this page, sembra Erlang consente di definire le funzioni che invierà i metodi completamente diversi a seconda sulla lista dei loro argomenti lista (fino a un ...
, dopo il quale gli argomenti sono opzionali/non influenzano il metodo inviato).
Per fare qualcosa del genere in R, probabilmente vorrai usare classi e metodi S4. Nel sistema S3, il metodo che viene inviato dipende esclusivamente dalla classe del primo argomento. Nel sistema S4, il metodo chiamato può dipendere dalle classi di un numero arbitrario di argomenti.
Per un esempio di ciò che è possibile, provare a eseguire quanto segue. Richiede di aver installato sia il pacchetto raster
sia il pacchetto sp
. Tra di loro, forniscono un gran numero di funzioni per tracciare sia dati spaziali raster che vettoriali, ed entrambi usano il sistema S4 per eseguire l'invio del metodo. Ciascuna delle righe restituite dalla chiamata a showMethods()
corrisponde a una funzione separata, che verrà inviata quando gli argomenti e vengono passati agli argomenti indicati con le classi indicate (che possono includere interamente "missing"
).
> library(raster)
> showMethods("plot")
Function: plot (package graphics)
x="ANY", y="ANY"
x="Extent", y="ANY"
x="Raster", y="Raster"
x="RasterLayer", y="missing"
x="RasterStackBrick", y="ANY"
x="Spatial", y="missing"
x="SpatialGrid", y="missing"
x="SpatialLines", y="missing"
x="SpatialPoints", y="missing"
x="SpatialPolygons", y="missing"
R è di sicuro. Provate, per un esempio:
plot(x = 1:10)
plot(x = 1:10, y = 10:1)
E poi andare a dare un'occhiata a come la funzione riesce a far questo, digitando plot.default
.
In generale, il modo migliore per imparare come implementare questo tipo di cose sarà spendere un po 'di tempo nel codice utilizzato per definire funzioni il cui comportamento ti è già familiare.
Poi, se si desidera esplorare forme più sofisticate di metodo di spedizione, ti consigliamo di guardare in entrambi i sistemi di classe S3 e S4 forniti da R.
Questo di solito è meglio farlo attraverso argomenti opzionali. Per esempio:
g <- function(X, Y=FALSE) {
if (Y == FALSE) {
# do something
}
else {
# do something else
}
}
questo sembra ok! penso che qualcosa di simile sarebbe ancora più bello: g <- function (X, FALSE) {# do something} g <- function (X, TRUE) {# do something} questo è simile alla funzione Erlang/Prologue corrispondenza definizioni/argomenti :-) qualsiasi idea se questo può essere fatto in R? – MadSeb
Il codice che stai descrivendo non funzionerà in R. Quello che stai cercando potrebbe essere la distribuzione del metodo, come discusso dalla risposta di @ JoshOBrien, e richiede qualche ricerca a seconda di cosa esattamente vuoi fare. –
tuo esempio funzioni suggeriscono un semplice caso di argomenti opzionali (come discusso di seguito), ma 'sovraccarico di funzione' potrebbe riferirsi a qualcosa di più sulla falsariga del metodo di R [dispatching systems] (http://cran.at.r-project.org/doc/manuals/R-lang.html# Object_002 Programmazione orientata) S3 e S4. – joran
sì, questo può essere fatto con argomenti opzionali ma sto cercando qualcosa di simile alle definizioni di funzione di Erlang :-) – MadSeb
Buon suggerimento, @joran. Mi hai battuto * e * fornito il link più appropriato. –