Как я могу вернуть все функции, определенные внутри функции? - PullRequest
2 голосов
/ 18 июня 2019

Я хочу вернуть все функции, которые я определил внутри функции.

Я знаю, что ls () можно использовать для возврата имен моих функций, но мне нужно вернуть список функций, определенных в теле исходной функции.

Например, моя функция можетвыглядит как

primaryFunction<-function(){
    a<-function(){return (2)} 
    b<-function(){return (3)} 
    return(?)} 

, где return (?) должен возвращать список, содержащий функции a, b.

1 Ответ

4 голосов
/ 18 июня 2019

Обычно я бы перечислял их все отдельно, чтобы они были явными:

primary_function = function () {
    a = function () 2
    b = function () 3
    list(a = a, b = b)
}

Но вы можете сократить, если их много:

primary_function = function () {
    a = function () 2
    b = function () 3
    as.list(environment())
}

(Вы также можете вернуть саму среду вместо копирования в список.)

Обратите внимание, что это вернет все локальные символы. Если у вас есть нефункциональные символы и вы хотите вернуть только функции, вместо этого выполните

primary_function = function () {
    a = function () 2
    b = function () 3
    mget(lsf.str())
}

Также обратите внимание, что ваш код содержит ошибки, поскольку в R return это не оператор, а вызов функции , который прерывает текущее выполнение функции. Таким образом, вам нужно написать это в скобках (например, return(2), а не return 2), и их использование здесь избыточно: R всегда возвращает последнее значение выполнения функции. Вот почему я их опустил. Я использую только return, чтобы сигнализировать о досрочном выходе.

...