如何从R中调用Sage?

4

从搜索中,我发现从Sage调用R非常无缝。然而,我找不到有关如何从R调用Sage的信息。例如,假设我有一个R表达式,我想要对其进行区分,比如说

temp <- expression(x + x^2)

我该如何将此发送给Sage并让它进行微分,然后发送回R表达式?我希望结果基本上等同于:
D(temp,'x')

我在CRAN和谷歌上搜索,但没有找到合适的解决方案。我希望有比基于system函数更好的解决方案。我看到R支持yacas,但我对Sage感兴趣。

我使用64位Ubuntu操作系统。

谢谢!


我怀疑除了“system”之外,没有其他解决方案-但如果有人提供一个,我会感到愉快的惊喜。看起来没有很容易的方法可以将Sage“笔记本服务器”调整为更简单的基于套接字的方式(正如Ryacas所使用的那样)。 - Ben Bolker
@BenBolker 很有趣,你认为未来会有一个软件包的机会吗?还是说它们的设置方式从根本上不兼容? - Xu Wang
我没有仔细研究过,所以不确定,但乍一看似乎比集成yacas更难。简单地查看yacas文档(man yacas),就可以快速发现一种建立客户端-服务器关系的方法,该方法通过套接字与服务器进行通信。而对Sage的类似快速查看并未提供同样简单的策略...按照下面所述的通过rJython的方式似乎更加有成效。 - Ben Bolker
1个回答

2
我不确定这是否可行,但是Sage库可以被导入到Python中,并且Python可以与rJython包接口。您能通过rJython调用Sage函数吗?可能没有Ryacas或rSymPy包那么简洁,但也许已经足够好了。
编辑 由于Sage使用SymPy,因此您可以直接与SymPy接口:
require(rSymPy)
x <- Var('x') # Convenience function for: sympy("var(’x’)")
sympy("diff(x + x**2, x, 1)")
# [1] "1 + 2*x"

@jhetzel,有趣 - 看起来那是唯一的方法。我想知道是通过system还是这种方式更好。谢谢。 - Xu Wang
@Xu Wang,我想选择权在你手中。但是,如果你使用rJython,你可以很容易地开发自己的便利包装函数,然后将它们发布为未来SageR的软件包。你可以查看rSymPy软件包作为示例,我相信它是一个通过rJython接口调用SymPy库函数的便利函数包。 - jthetzel
谢谢,如果您有时间,能否请您向我展示如何使用您的方法来解决我的例子? - Xu Wang
@Xu Wang,我会尽快为你准备一个简短的示例,今晚稍后会发给你。与此同时,你可以在以下网址查看rSymPy的源代码:http://code.google.com/p/rsympy/source/browse/#svn%2Ftrunk 。sympy.R函数似乎是用来建立rJython接口和SymPy库之间的联系,而Sym.R函数则用于构建常见的SymPy命令以提高便利性。 - jthetzel
有趣。好,这是个好主意!我一直想了解rSymPy,也许现在是时候了。谢谢你的帮助! - Xu Wang
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接