Fye 我想到一个近似方法,就是代一组值进去计算,如果计算结果一样就是相等的
a = expression(x^2 + x)
b = expression(x*(x + 1))
a_val = eval(a, list(x = seq(10)))
b_val = eval(b, list(x = seq(10)))
identical(a_val, b_val)
比较准确的方式是,管他两个表达式是啥,都调用同一方法简化,然后比较
library(Deriv)
identical(Simplify(a), Simplify(b))
或者
a = expression(2*x*(x+1)+x^2)
b = expression(3*x^2 + 2*x)
library(Ryacas)
identical(as.expression(Simplify(a)), as.expression(Simplify(b)))
一种比较合适的方式是老师自己留有化简正确的答案(可能不止一个),只有化简后的表达式符合这几种形式的才算对,有点测试的味道。如果你有很强的符号计算需求我推荐使用 Ryacas 这个 R 包,这个 R 包比起几年前我写那篇文章的时候好用很多了
exams 包介绍主页 <http://www.r-exams.org/> 看起来确实不错,不过好像重走 rmarkdown 路线 @yihui