1

我正在 python 中运行一些线性模型(通过 RPy 使用 R 作为后端),我想用我的 R“摘要”数据导出一些 LaTeX 表。

该线程很好地解释了如何在 R 中执行此操作(使用xtable函数),但我无法弄清楚如何在 RPy 中实现它。

唯一相关的搜索,如“Chunk RPy”或“xtable RPy”返回的是这个,它似乎在 python 中加载包但不使用它:-/

这是我如何使用 RPy 以及会发生什么的示例。

这将是错误而无需加载任何数据:

from rpy2.robjects.packages import importr
xtable = importr('xtable')
latex = xtable('')

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-131-8b38f31b5bb9> in <module>()
----> 1 latex = xtable(res_sum)
  2 print latex

TypeError: 'SignatureTranslatedPackage' object is not callable

我尝试使用stargazer包而不是,xtable我得到了同样的错误。

4

3 回答 3

1

好的,我解决了它,我有点惭愧地说这是一个完全不费脑筋的事情。

您只需将函数称为xtable.xtable()or stargazer.stargazer()

于 2013-11-10T18:20:06.863 回答
0

为了方便地从 Python 生成 TeX 数据,我编写了以下函数;

import re


def tformat(txt, v):
    """Replace the variables between [] in raw text with the contents
    of the named variables. Between the [] there should be a variable name,
    a colon and a formatting specification. E.g. [smin:.2f] would give the
    value of the smin variable printed as a float with two decimal digits.

    :txt: The text to search for replacements
    :v: Dictionary to use for variables.
    :returns: The txt string with variables substituted by their formatted
    values.
    """
    rx = re.compile(r'\[(\w+)(\[\d+\])?:([^\]]+)\]')
    matches = rx.finditer(txt)
    for m in matches:
        nm, idx, fmt = m.groups()
        try:
            if idx:
                idx = int(idx[1:-1])
                r = format(v[nm][idx], fmt)
            else:
                r = format(v[nm], fmt)
            txt = txt.replace(m.group(0), r)
        except KeyError:
            raise ValueError('Variable "{}" not found'.format(nm))
    return txt

您可以在传递给此函数的文本中使用字典中的任何变量名称,并将其替换为该变量的格式化值。

我倾向于做的是在 Python 中进行计算,然后将globals()函数的输出作为第二个参数传递tformat

smin = 235.0
smax = 580.0
lst = [0, 1, 2, 3, 4]
t = r'''The strength of the steel lies between SI{[smin:.0f]}{MPa} and \SI{[smax:.0f]}{MPa}. lst[2] = [lst[2]:d].'''
print tformat(t, globals())

随意使用这个。我把它放在公共领域。

编辑:我不确定你所说的“线性模型拟合”是什么意思,但可能会numpy.polyfit在 Python 中做你想要的?

于 2013-11-10T15:47:23.290 回答
0

要解决您的问题,请更新stargazer到版本 4.5.3,现在可在 CRAN 上使用。然后,您的示例应该可以完美运行。

于 2013-11-15T06:07:49.580 回答