【发布时间】:2010-10-27 14:37:23
【问题描述】:
前几天一位同事问我以下问题。在下面这段代码中,如何提取渐变:
> x=5
> a = eval(deriv(~ x^3, "x"))
> a
[1] 125
attr(,"gradient")
x
[1,] 75
我的回答是
> attr(a, "gradient")[1]
[1] 75
这种语法对我来说似乎很笨拙。有没有更好的方法来提取梯度?
【问题讨论】:
前几天一位同事问我以下问题。在下面这段代码中,如何提取渐变:
> x=5
> a = eval(deriv(~ x^3, "x"))
> a
[1] 125
attr(,"gradient")
x
[1,] 75
我的回答是
> attr(a, "gradient")[1]
[1] 75
这种语法对我来说似乎很笨拙。有没有更好的方法来提取梯度?
【问题讨论】:
不确定这些算不算更好,但是:
with(attributes(a), gradient)
或
attributes(a)$gradient
是将属性作为列表返回以供选择的替代方法。
【讨论】:
虽然它并不比你的方法好,但你可以创建一个函数grad,它接受一个带有渐变属性的数字并返回渐变值。
grad = function(x)attr(x,"gradient")[1]
grad(a)
现在可以重复使用了。
【讨论】: