псевдонимы функций - PullRequest
       7

псевдонимы функций

0 голосов
/ 18 октября 2011

В RI есть две функции, которые делают одно и то же, за исключением того, что у них есть другой набор переменных по умолчанию.Скажем, у меня есть function1<-function(a=1,b=2,c=3){...}, что у меня сейчас есть функция 2, вызывающая функцию 1, за исключением определения другого набора переменных по умолчанию function2<-function(a=3,b=4,c=5){function1(a=a,b=b,c=c)}очевидно, это не оптимально, и мне было интересно, есть ли лучший способ написать эти две функции (возможно, иметь общую функцию и сделать два других псевдонима с различными переменными по умолчанию?)

Ответы [ 3 ]

2 голосов
/ 19 октября 2011

Вы можете изменить параметры по умолчанию с помощью formals<-.

> f1 <- function(a = 1) a
> f2 <- f1
> formals(f2)$a <- 2
> 
> f1
function(a = 1) a
> f2
function (a = 2) 
a
> 
> f1()
[1] 1
> f2()
[1] 2
0 голосов
/ 18 октября 2011

Посмотрите на эту вики о функциях первого порядка Хэдли.Одна из обсуждаемых функций - Curry, которая позволяет вам определять варианты функции точно так же, как вы упомянули в своем вопросе.

0 голосов
/ 18 октября 2011

Полагаю, вы могли бы просто добавить еще один аргумент к исходной функции, который действует как флаг, чтобы указать, какой набор значений по умолчанию использовать:

function1 <- function(a=1, b=2, c=3, altDefaults = FALSE){
    if (altDefaults){
        a <- 3; b <- 4; c <- 5
    }
}

Можно расширить это, я полагаю, для включения нескольких наборов значений по умолчаниюно это может стать громоздким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...