так у меня есть ошибка ...Plotting постоянную функцию в R с кривой()
f <- function(x){return(1)}
curve(f(x),0,100,xname="x")
Error in curve(f(x), 0, 100, xname = "x") :
'expr' did not evaluate to an object of length 'n'
Что странно, учитывая, что
F <- function(x){return(0*x+1)}
curve(F(x),0,100,xname="x")
прекрасно работает ... Об этом проинформировал меня подумайте о том, как R обрабатывает data.frame() s.
a <- data.frame(1,2,3)
f(a)
# [1] 1
F(a)
# X1 X2 X3
# 1 1 1 1
Это означает, что функция Vectorize() исправит мою проблему. Безрезультатно это острый пример неявных решений, которые делает R, что приводит к непоследовательному поведению.
Из 'curve':' Expr Имя функции, или вызов или выражение записывается в виде функции от х, которые будут оценивать на объект такой же длины, как x.' В вашей первой функции вы не используете/не оцениваете 'x'. Если вы хотите, чтобы константа возвращалась, она работает: 'f <- function (x) {x-x + 1}'. –
Итак, это трение, без сильных ошибок при вводе текста, когда вы их не ожидаете. К счастью, F <- Vectorize (function (x) {return (1)}) явно задает поведение, требуемое для Curve(). [typing] (http://en.wikipedia.org/wiki/Strong_and_weak_typing) – kpie