2

我正在编写一个简短的 Sweave 文档,该文档输出到 Beamer 演示文稿中,其中我使用 sagetex 包来求解 beta 二项式分布中两个参数的方程,我需要将参数值分配到 R 会话中,以便我可以对这些值进行额外处理。以下代码摘录显示了我如何与 sage 交互:

<<echo=false,results=hide>>=
mean.raw <- c(5, 3.5, 2)
theta <- 0.5  
var.raw <- mean.raw + ((mean.raw^2)/theta)
@

\begin{frame}[fragile]
\frametitle{Test of Sage 2}
\begin{sagesilent}
var('a1, b1, a2, b2, a3, b3')
eqn1 = [1000*a1/(a1+b1)==\Sexpr{mean.raw[1]}, ((1000*a1*b1)*(1000+a1+b1))/((a1+b1)^2*(a1+b1+1))==\Sexpr{var.raw[1]}]
eqn2 = [1000*a2/(a2+b2)==\Sexpr{mean.raw[2]}, ((1000*a2*b2)*(1000+a2+b2))/((a2+b2)^2*(a2+b2+1))==\Sexpr{var.raw[2]}]
eqn3 = [1000*a3/(a3+b3)==\Sexpr{mean.raw[3]}, ((1000*a3*b3)*(1000+a3+b3))/((a3+b3)^2*(a3+b3+1))==\Sexpr{var.raw[3]}]
s1 = solve(eqn1, a1,b1)
s2 = solve(eqn2, a2,b2)
s3 = solve(eqn3, a3,b3)
\end{sagesilent}

Solutions of Beta Binomial Parameters:
\begin{itemize}
\item $\sage{s1[0]}$
\item $\sage{s2[0]}$
\item $\sage{s3[0]}$
\end{itemize}
\end{frame}

一切都编译得很好,在那张幻灯片中,我可以看到该逐项列表中三个方程各自参数的解(例如,该投影仪幻灯片的逐项列表中的第一项输出为[a1=(328/667), b1=(65272/667)](我无法发布投影仪幻灯片的图像,但我希望你明白)。

我想将参数值保存a1,b1,a2,b2,a3,b3到 R 对象中,以便我可以在模拟中使用它们。我在 sagetex 包中找不到任何关于如何将 sage 命令的输出保存到变量中以供其他程序(在本例中为 R)使用的文档。关于如何将这些值输入 R 的任何建议?

4

1 回答 1

1

哇,你真的混合了两个世界;)

我能给你的唯一想法是求解命令的“solution_dict=True”参数。然后你会得到一个 Python 字典,它可能会帮助你输出值。但我不知道 Sweave 究竟做了什么,也不知道该过程的哪个步骤何时重写了什么。

一般来说,如果你只在 sagetex 中编写它并通过 rpy2 Python 包装器调用 R 可能会更好。但这对您来说可能工作量太大 - 也许只是一张幻灯片,然后通过一些 pdf 合并将它们拼接在一起?

于 2010-06-18T22:02:08.200 回答