R - изменить неизвестную функцию - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть функция f некоторого вектора x
Функция в R записывается как:
f <- function(x){#insert some function of x here}
Я хотел бы вернуть (-f), что обозначаетнегатив функции.В случае, если сама функция известна заранее, это простое упражнение.
Однако в этом случае я не знаю, что это за функция

Может кто-нибудь помочь мне с кодом R, чтобыосуществить это?(Вывод должен быть функцией в векторе x.)

Примером может быть - f (x) = x + 1, тогда -f (x) = -x - 1

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Следующая функция getNegFn() принимает функцию fn и возвращает функцию, которая возвращает отрицательное возвращаемое значение fn:

getNegFn <- function(fn){
    fnOut <- function(){
        - do.call(what=fn, args=as.list(match.call())[-1])
    }
    formals(fnOut) <- formals(fn)
    fnOut
}

Пример:

fn <- function(x) x + 1
nFn <- getNegFn(fn=fn)

fn(1)
[1] 2
nFn(1)
[1] -2

Также работает, если функция ввода имеет ... аргументов:

fn2 <- function(x, ...) x + sum(unlist(list(...)))
nFn2 <- getNegFn(fn=fn2)

fn2(x=1, y=2)
[1] 3
nFn2(x=1, y=2)
[1] -3
0 голосов
/ 24 ноября 2018

Посмотрите в do.call ().Вы можете дать ему строку имени функции в качестве аргумента, и тогда эта функция будет вызываться с аргументами, которые вы предоставляете (в list()), поэтому, например, вы можете сделать:

funcname<-"mean" 
dat<-1:5
do.call(funcname, list(dat))*(-1)

будет работать так, как если бы вы позвонили mean(dat)*(-1), что даст вам:

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