首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中无yacas方程的算术运算

R中无yacas方程的算术运算
EN

Stack Overflow用户
提问于 2015-07-20 12:36:22
回答 2查看 107关注 0票数 0

我定义了likef<-"x^2"and g<-"y^2"__方程。我想得到像z<-(x^2)*(y^2)__这样的z方程。

'Class(f)‘、'class(g)’和'class(z)‘值对我来说并不重要。

我试过这个:

代码语言:javascript
复制
> f<-"x^2"
> g<-"y^2"
> z<-f*g

我得到了:

代码语言:javascript
复制
Error in f * g : non-numeric argument to binary operator<br/>

我尝试将f<-expression(f)g<-expression(g)相乘,但没有结果。

我也试过:

代码语言:javascript
复制
> f<-function(x) x^2
> g<-function(y) y^2
> z<-function(x,y) f*g
> z<-parse(text=z)

我得到了:

代码语言:javascript
复制
Error in as.character(x) : 
  cannot coerce type 'closure' to vector of type 'character'

paste(z)代替parse(z)

代码语言:javascript
复制
> paste(z)
Error in paste(z) : 
  cannot coerce type 'closure' to vector of type 'character'

有没有一种方法可以在R中不使用像yacas这样的重软件来进行符号运算?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-20 12:45:32

您可以尝试以下几种方法:

代码语言:javascript
复制
f <- expression(x^2)
g <- expression(y^2)
z <- expression(eval(f) * eval(g))
#> eval(z,list(x = 1, y = 2))
#[1] 4
#...and here's another test, just to be sure:
#> identical(eval(z, list(x = 17, y = 21)), 17^2 * 21^2)
#[1] TRUE

或者您可以使用rSymPy包:

代码语言:javascript
复制
library(rSymPy)
x <- Var("x")
y <- Var("y")
sympy("f = x**2")
sympy("g = y**2")
sympy("z = f * g")
#> sympy("z")
#[1] "x**2*y**2"
#> sympy("z.subs([(x,3),(y,2)])")
#[1] "36" 

第二个建议可能不是很有吸引力,因为它可能更容易直接使用Python

票数 2
EN

Stack Overflow用户

发布于 2015-07-20 14:01:10

你对符号和功能的使用非常令人困惑。如果您想使用语言对象的“片段”,您可以使用更类似的

代码语言:javascript
复制
f <- quote(x^2)
g <- quote(y^2)
z <- quote(f*g)
do.call("substitute", list(z, list(f=f, g=g)))
# x^2 * y^2

如果您只想要某种形式的函数组合,只需确保您将变量视为函数。

代码语言:javascript
复制
f <- function(x) x^2
g <- function(y) y^2
z <- function(x,y) f(x)*g(y)

但这些只是构建R语言元素的方法。把这些看作代数运算是不明智的。R不会试图简化或类似的东西。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31516702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档