我在python中运行一些线性模型拟合(通过RPy使用R作为后端),我想用R“摘要”数据导出一些LaTeX表。
This thread很好地解释了如何在R中使用xtable
函数),但我无法弄清楚如何在RPy中实现它。
唯一相关的搜索,如“Chunk RPy”或“xtable RPy”返回的是this,这似乎是在python中加载包但不使用它: - /
Here's an example我如何使用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
,我收到同样的错误。
答案 0 :(得分:1)
好的,我解决了,我有点惭愧地说这完全没问题。
您只需将这些功能称为xtable.xtable()
或stargazer.stargazer()
。
答案 1 :(得分: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中做你想做的事情吗?
答案 2 :(得分:0)
要解决您的问题,请将stargazer
更新为版本4.5.3,现在可在CRAN上使用。那么你的例子就应该完美无缺。