为什么在R中涉及函数curve()的语句会返回错误?

3

我只是好奇为什么这个语句在 R 中会返回一个错误

>   curve(function(x) x^2, from = -2, to = 2)

##Error in curve(function(x) x^2, from = -2, to = 2) : 
 #'expr' did not evaluate to an object of length 'n'

我知道这个语句完美地工作。

>   curve(x^2, from = -2, to = 2)

据我所知,R中函数curve()的第一个参数应该是矢量化函数。因此,function(x) x^2作为参数也应该是矢量化函数,因为它返回一个数值向量,其长度等于输入数值向量的长度。
然而,我不能确定,因为我在编程方面没有严格的背景。显然,我是错的。

2
我认为curve中的第一个参数expr=是在寻找一个函数的名称,而不是一个函数本身。因此,它需要在外部进行声明- f <- function(x) x^2; curve(f, from=-2, to=2)。否则,您可以直接使用plot绘制函数plot(function(x) x^2, xlim=c(-2,2)) - thelatemail
1
请注意,帮助页面“?curve”中说:“曲线处理表达式的方式引起了困惑。”请改用plot,它将使用方法plot.function - kjetil b halvorsen
2个回答

3

我认为在curve函数中,第一个参数expr=寻找的是一个函数的名称而非函数本身。

expr:函数的名称,或者作为关于“x”的函数写成的调用或表达式,将评估为与“x”长度相同的对象。

因此,需要外部声明一个函数才能使其正常工作:

f <- function(x) x^2
curve(f, from=-2, to=2) 

否则,您可以直接使用plot.function绘制函数,该函数实际上在最后一行调用curve函数:
plot.function
#function (x, y = 0, to = 1, from = y, xlim = NULL, ylab = NULL, 
#    ...) 
#{
#    <snip>
#    curve(expr = x, from = from, to = to, xlim = xlim, ylab = ylab, 
#        ...)
#}

就像:

plot(function(x) x^2, xlim=c(-2,2))

2
或者也可以这样做。
curve((function(x) x^2)(x), from = -2, to = 2)

1
很有趣。我不知道这种语法存在。 - Pikachu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接