【发布时间】:2013-10-17 20:16:55
【问题描述】:
在 R 中,我想要一种方法来获取公式右侧的符号导数,其中可能包括交互项、平方项等。
例如,我希望能够对以下两个 [edit:three] 公式中的每一个求得右手边关于 x 的导数:
y~x+I(x^2)
y~x:z
编辑:y~x*z
我想要一个函数,当输入上述三个公式时,分别返回1+2x、z和1+z。
我尝试了以下方法:
f1<-y~x+I(x^2)
deriv(f1,"x")
## Error in deriv.formula(f1, "x") : Function 'I' is not in the derivatives table
f2<-y~x:z
deriv(f2,"x")
## Error in deriv.formula(f2, "x") : Function '`:`' is not in the derivatives table
有什么方法可以强制 R 将 I(x^2)(或类似地,I(x*z) 等)识别为 x^2(分别为 x*z),x:z 识别为 x *z(在数学意义上)和 x*z(在公式意义上)作为 x+z+x*z(在数学意义上)用于计算导数?
其次,有没有办法从 deriv() 获取输出并将其重塑为看起来像公式的右侧?特别是,我知道 D() 将缓解这个问题并以我想要的形式生成输出(尽管 D() 不能将公式作为输入处理),但是如果我想对多个变量进行导数怎么办?我可以通过对每个我想对其进行导数的变量反复应用 D() 来解决这个问题,但是最好简单地输入所有这些变量的字符串并接收适合放置的输出在公式的右侧。
谢谢!
【问题讨论】:
-
请详细解释为什么
y~x:z应该返回1+x。 (在 R 中,x*z是1+x+z+x:z,不是相反。) -
@DWin :抱歉,应该说是
x*z,这实际上引发了另一个问题——R 将公式中的x*z解释为1+x+z+x:z,但如果你通过deriv(y~x*z,"x"),这会产生z作为导数,它应该是1+z。关于x:z,它实际上应该返回z,而不是1+z(在原始问题中进行编辑)。 -
deriv函数使用“*”的数学定义,而“:”没有数学定义。请编辑您的问题以清除错误并重新构建以提出合法请求。仅仅说一个函数的行为不像你想象的那样是没有帮助的。如果需要,您需要对新功能提出合理且具体的要求。 -
对。我的问题是我是否可以强制它在输入公式中将
x:z识别为数学上的x*z(或者,进一步,将x:z:a识别为x*z*a)和x*z,在输入公式中识别为@987654341 @数学上。 -
我很抱歉。我并不是说
deriv有任何问题,只是询问是否有办法强制它识别我以我想要的方式提供的输入(我认为这是相当直观的)。我已经编辑了这个问题以反映这一点,尽管我认为它一直都有合理和具体的要求。
标签: r formula derivative