R语言自定义求导函数报object 'x' not found错如何解决
报错原因
你的代码存在两个问题直接触发报错:
- 调用
derivada(x^2)时,R会优先在全局环境计算x^2的值,但全局环境没有定义名为x的对象,还没进入函数逻辑就先触发了对象不存在的错误。 - 函数内写的
expression(x)没有赋值给任何变量,属于无效代码,完全没有实现把传入内容转为表达式的作用。
修正方法
你可以选任意一种符合你使用习惯的写法:
写法1:调用时手动传入表达式对象
derivada <- function(expr) { res <- D(expr, "x") print(res) } # 调用时用expression()包裹求导目标 derivada(expression(x^2))
运行后会正常输出求导结果:2 * x
写法2:函数内部自动捕获未计算的表达式
这种写法不需要调用时手动套expression(),和你原本的调用习惯一致:
derivada <- function(expr) { # 捕获传入的未求值参数,转为表达式 expr <- substitute(expr) res <- D(expr, "x") print(res) } # 直接传入求导公式即可 derivada(x^2)
运行后同样能得到正确结果2 * x。
补充说明:R内置的求导函数
D()要求第一个参数必须是表达式类型的未求值语句,直接传入会被提前计算的x^2(且x不存在时)必然触发报错。
内容的提问来源于stack exchange,提问作者Matheus Nunes
相关产品推荐
相关产品推荐

