R 如何根据多个参数计算函数的偏导数;德里夫;

R 如何根据多个参数计算函数的偏导数;德里夫;,r,symbolic-math,derivative,R,Symbolic Math,Derivative,我试图使用这个软件包,根据一个或两个变量和一个参数向量计算函数的符号导数。但是,我总是得到错误信息: FUN(X[[i]],…)中出错:无法检索“[()”的正文 我试过: test_fun <- function(x,y,par){x\*par[1]+y\*par[2]} Deriv(test_fun,"x",par=c(2,2)) test\u fun更新答案(9/16): 下面有两个选项可用于通过Deriv传递参数。还请注意,derivate将在原始函数中

我试图使用这个软件包,根据一个或两个变量和一个参数向量计算函数的符号导数。但是,我总是得到错误信息:

FUN(X[[i]],…)中出错:无法检索“[()”的正文

我试过:

test_fun <- function(x,y,par){x\*par[1]+y\*par[2]}  
Deriv(test_fun,"x",par=c(2,2))  
test\u fun更新答案(9/16):

下面有两个选项可用于通过
Deriv
传递参数。还请注意,
derivate
将在原始函数中保留大括号,因此可以在不使用大括号的情况下定义函数,也可以在之后调用
eval()

选项1.在调用
Deriv

test_fun <- function(x,y,par){x*par[1]+y*par[2]}
eval(Deriv(test_fun(par=c(2,2)),'x'))
# [1] 2

test\u fun
上的最后一个例子?Deriv
做你想做的事情最后一个例子涉及添加自定义派生规则。很抱歉,我没有直接看到这是如何解决我的问题的。虽然我可能误解了这个例子,因为我不完全理解第二个参数“y”的用法在这个结构中。你能添加一个最小的工作示例吗?抱歉,也许我误解了,但我指的是关于将参数传递给函数的部分,该函数依次传递给
Deriv
。在你的例子中,这将是
Deriv(test_-fun(par=c(2,2)),“x”)
@bunk这个问题与Patrick建议的答案类似。输出显然是一种
语言
,我不知道如何提取相关信息,输出不是一个函数,而
是.numeric(Deriv(test_-fun(par=c(2,2)),“x”)
产生一个错误。此外,这种方法似乎只在直接插入参数时才起作用。
test\u par您可以
eval
结果,但我同意这不是理想的分离参数的工作方式,但对于依赖大量参数的函数来说似乎非常不公平。您的第二个建议看起来很有希望,但是输出以一种非常奇怪的形式出现。
as.numeric(Deriv(test_-fun(x,y,c(2,2)))
产生
错误:“pairlist”对象不能强制键入“double”
知道如何将输出转换为更实用的内容吗?@PatrickBOK,我找到了答案。
Deriv
函数在函数定义周围保留了花括号。我相信这将继续是对需要更多数据的函数的限制不止一行需要定义,但我让它为您的测试工作。请参见上面的编辑。我也取得了一些进展:使用
eval()
,也可以避开大括号。如果导数仍然依赖于
x
,这也行。尽管我必须在
eval()之外为x赋值
此外,我发现可以使用函数插入参数
test_fun <- function(x,y,par){x\*2+y\*2}  
Deriv(test_fun,"x")  
test_fun <- function(x,y,par){x*par[1]+y*par[2]}
eval(Deriv(test_fun(par=c(2,2)),'x'))
# [1] 2
test_fun <- function(x,y,par){x*par[1]+y*par[2]}
tpar <- function() c(2,2)
eval(Deriv(test_fun(par=tpar()), "x"))
# [1] 2