我试图采用表达式的衍生物:
x = read.csv("export.csv", header=F)$V1
f = expression(-7645/2* log(pi) - 1/2 * sum(log(w+a*x[1:7644]^2)) + (x[2:7645]^2/(w + a*x[1:7644]^2)),'a')
D(f,'a')
x只是一个整数向量,a和w是我试图通过推导找到的变量。但是,我收到了错误
"功能' [
'不属于衍生品表"
因为这是我第一次使用R,而现在无法做什么。我假设R在表达式中的sum函数有问题吗?
按照建议后,我现在做了以下事情:
y <- x[1:7644]
z <- x[2:7645]
f = expression(-7645/2* log(pi) - 1/2 * sum(log(w+a*y^2)) + (z^2/(w + a*y^2)),'a')
得出这个给了我错误&#34;总和不在衍生物表中#34;。如何确保表达式考虑y和z的每个值?
另一个更新:
y <- x[1:7644]
z <- x[2:7645]
f = expression(-7645/2* log(pi) - 1/2 * log(w+a*y^2) + (z^2/(w + a*y^2)))
d = D(f,'a')
uniroot(eval(d),c(0,1000))
我已经淘汰了&#34;总和&#34;功能,刚输入y和z。现在,2个问题:
a)我怎样才能确定这仍然是预期的行为? b)Uniroot似乎并不喜欢&#34; w&#34;和&#34; a&#34;因为它们只是象征性的。我该如何解决这个问题呢?我得到的错误是&#34;对象&#39; w&#39;找不到&#34;
答案 0 :(得分:1)
这应该有效:
由于您添加了两个词f+g
,衍生词D(f+g) = D(f) + D(g)
,所以我们将这两个词分开:
g = expression((z^2/(w + a*y^2)))
f = expression(- 1/2 * log(w+a*y^2))
看到sum()
已从表达式f中删除,因为乘法常量已移至sum()
和D(sum()) = sum(D())
。此外,第一个常数被删除,因为导数为0。
所以:
D(sum(-7645/2* log(pi) - 1/2 * log(w+a*y^2)) + (z^2/(w + a*y^2)) = D( constant + sum(f) + g ) = sum(D(f)) + D(g)
应该给出:
sum(-(1/2 * (y^2/(w + a * y^2)))) + -(z^2 * y^2/(w + a * y^2)^2)
答案 1 :(得分:1)
表达式只接受一个expr输入,而不是一个向量,并且它超出了能够对其进行矢量化的能力。 您也可以使用for循环执行此操作:
foo <- c("1+2","3+4","5*6","7/8")
result <- numeric(length(foo))
foo <- parse(text=foo)
for(i in seq_along(foo))
result[i] <- eval(foo[[i]])