Как сравнить функции? - PullRequest
       2

Как сравнить функции?

13 голосов
/ 09 марта 2012

Можно ли сравнить два одинаковых функциональных объекта?

m <- mean
m == mean ## don't work

## this seems not to be the correct way:
functionBody(mean)==functionBody(m)

РЕДАКТИРОВАТЬ : некоторые дополнительные сведения.У меня есть функция с двумя аргументами (матрица и пользовательская функция, которая применяется по столбцам, например, среднее значение, медиана, ...).Если функция mean, я хочу использовать colMean вместо этого (чтобы сэкономить время работы).

foo <- function(m, fun) {
  #if (fun==mean) {
  #  return(colMeans(m));
  #} else {
    return(apply(m, 2, fun));
  #}
}

Ответы [ 3 ]

20 голосов
/ 09 марта 2012

Вы можете использовать identical:

identical(m,mean)
6 голосов
/ 10 марта 2012

Я использую isTRUE(all.equal(function1,function2)), но это страдает от недостатков, аналогичных другим методам.

Интересно, что all.equal дает хорошую сводную информацию о различии двух операндов (попробуйте all.equal(function1,function2).

3 голосов
/ 10 марта 2012

Вы можете конвертировать функции в строки, и сравните эти строки.

equal_functions <- function(f,g)
  all( 
    capture.output(print(f)) ==
    capture.output(print(g))
  )
equal_functions(function(x) x, function(x) x) # TRUE

Но функции, которые отличаются по несущественным причинам, будут рассматриваться как разные.

equal_functions(function(x) x, function(u) u) # FALSE
equal_functions(
  function(x) x, 
  function(x) 
    x
) # FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...