R语言中curve(function(x) x^2)语句报错原因咨询
为什么在R中使用匿名函数调用curve()会报错?
curve()函数的第一个参数expr的处理逻辑是问题的核心:
- 当你传入
x^2这类表达式时,curve()会在内部生成from到to之间的一系列x值(默认101个点),直接对这些x值计算表达式结果,得到长度匹配的数值向量,因此能正常绘图。 - 当你直接传入匿名函数
function(x) x^2时,curve()会把这个函数对象当作表达式求值,而非调用它。内部执行逻辑是将function(x) x^2赋值给临时变量,得到的是一个函数对象,而非长度为101的数值向量,这就触发了报错:'expr' did not evaluate to an object of length 'n'。
curve()仅对函数名(而非匿名函数对象)做函数调用处理:如果传入的是已赋值的函数名(比如先执行f <- function(x) x^2,再传f),curve()会识别出这是函数名,自动调用该函数并传入内部生成的x向量,从而得到正确结果。
解决方法
有两种常见方式可以用匿名函数调用curve():
- 将匿名函数赋值给变量,再传入变量名:
f <- function(x) x^2 curve(f, from = -2, to = 2)
- 在表达式中直接调用匿名函数(显式传入x参数):
curve((function(x) x^2)(x), from = -2, to = 2)
内容的提问来源于stack exchange,提问作者Neuchâtel
相关产品推荐
相关产品推荐

