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

Есть ли способ сравнить, являются ли два объекта функции одинаковыми?

m <- mean m == mean ## don't work ## this seems not to be the correct way: functionBody(mean)==functionBody(m) 

EDIT : Некоторые подробности. У меня есть функция с двумя аргументами (matrix и пользовательская функция, которая применяется по порядку столбца, например, средняя, ​​медианная, …). Если функция является mean я хочу вместо этого использовать colMean (чтобы сохранить некоторое время работы).

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

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

 identical(m,mean) 

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

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

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

 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 
  • Два способа определения функций в Scala. В чем разница?
  • Как программно создать функцию R?
  • Разница между . и: в Луа
  • Как составить `не` с функцией произвольной arity?
  • Последняя непустая ячейка в столбце
  • Функция триггера jquery, когда элемент находится в viewport
  • Зачем использовать именованные функциональные выражения?
  • Как я могу сделать глубокую копию функции в Python?
  • в c: func (void) vs. func ()
  • Заполните непересекающиеся пустые ячейки со значением из ячейки над первым пробелом
  • Как строки передаются в .NET?
  • Давайте будем гением компьютера.