Ответ 1
EDIT, после разъяснения вопроса в комментариях выше:
С быстрым взглядом на эту страницу, похоже, что Erlang позволяет вам определять функции, которые будут отправлять совершенно разные методы в зависимости от арности их списка аргументов (вверх до ...
, после чего аргументы являются необязательными/не влияют на отправленный метод).
Чтобы сделать что-то подобное в R, вы, вероятно, захотите использовать классы и методы S4. В системе S3 отправленный метод зависит исключительно от класса первого аргумента. В S4-системе вызванный метод может зависеть от классов произвольного числа аргументов.
В качестве примера можно сделать следующее. Он требует установки пакета raster
и пакета sp
. Между ними они обеспечивают большое количество функций для построения как растровых, так и векторных пространственных данных, и оба из них используют систему S4 для выполнения отправки метода. Каждая из строк, возвращаемых вызовом showMethods()
, соответствует отдельной функции, которая будет отправляться, когда plot()
передается x
и y
аргументы с указанными классами (которые могут включать в себя полностью "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 конечно. Попробуйте, например:
plot(x = 1:10)
plot(x = 1:10, y = 10:1)
И затем взгляните на то, как эта функция выполняет это, набрав plot.default
.
В общем, лучший способ научиться тому, как реализовать эту вещь, - это потратить некоторое время на то, чтобы прокручивать код, используемый для определения функций, поведение которых уже знакомо вам.
Затем, если вы хотите изучить более сложные формы отправки методов, вы захотите изучить как системы классов S3, так и S4, предоставленные R.