R语言如何将求导得到的call对象转换为可正常计算的带参函数
R语言求导Call对象转可执行函数解决方案
问题根因
你当前写法失效的核心是:alist(a=,x=,someDeriv)中的someDeriv会被直接识别为函数体的固定符号,不会自动替换为你提前计算得到的求导Call对象内容,所以调用函数时只会原样返回表达式,不会执行计算。
修复方案
方法1:基础R原生实现(推荐)
通过列表拼接的方式把求导得到的Call对象设置为函数体:
# 原求导代码 someDeriv <- D(expression(a * x^2 + x), "x") # 转换为可执行函数:拼接参数列表+求导结果作为函数体 fn <- as.function(c(alist(a=, x=), someDeriv)) # 测试调用 fn(a=1, x=2) # 返回结果:5
方法2:手动指定函数体
也可以先定义带参数的空函数,再给函数手动赋值函数体:
# 定义带参数的空函数 fn <- function(a, x) {} # 将求导得到的Call对象设置为函数体 body(fn) <- someDeriv # 测试调用 fn(a=1, x=2) # 返回结果:5
实现逻辑
as.function接收的列表参数中,前面的项为函数入参定义,最后一项会被识别为函数体- 把提前计算好的求导Call对象作为列表最后一项传入,就能正确替换为可执行的表达式,调用时会自动完成数值计算
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

