plot() против curve() в R: почему curve() не может принимать встроенную определенную функцию

#r

#r

Вопрос:

Почему plot() и curve() ведут себя по-разному в этом контексте? plot(), похоже, справляется с определением функции на месте. В то время как curve (), похоже, это не нравится:

 > plot(function(x) sin(x), 0,3.14)
> plot(sin, 0,3.14)
> 
> curve(sin, col="red",add=T)
> curve(function(x) sin(x), col="red",add=T)
Error in curve(function(x) sin(x), col = "red", add = T) : 
  'expr' did not evaluate to an object of length 'n'
  

Это просто несоответствие или есть более глубокий способ понять это?

Нельзя ли всегда использовать встроенное определение функции везде, где можно использовать именованную функцию?

Ответ №1:

Существует plot.function -функция. Используйте methods(plot) , чтобы убедиться, что она видна и ее код можно увидеть с:

  plot.function
  

Он отправляет свой первый аргумент в curve , а затем позиционно сопоставляет любые дополнительные аргументы числом до 4 как from = from, to = to, xlim = xlim, ylab = ylab . Любые дополнительные аргументы должны совпадать по имени с аргументами curve

У curve -функции нет никаких методов, поэтому предоставление ей объекта-функции в качестве первого аргумента завершается неудачей. Я сочувствую этой трудности, с которой вы сталкиваетесь, но на ?curve странице справки на самом деле не говорится, что вы можете указать функцию в качестве первого аргумента, скорее говоря, что вы можете указать R-name, то есть выражение (в широком смысле этого слова), которое можно найти в таблице символов с функцией в качестве ее значения. Когда речь идет о языке R, термины name и symbol являются синонимами.