parseを使ってみる.
import rpy2.rinterface as ri
ri.initr()
expression = ri.parse('1 + 2')
len(expression)
len(expression[0])
ri.str_typeint(expression[0][0].typeof)
'SYMSXP'
tuple(expression[0][1])
(1.0,)
tuple(expression[0][2])
(2.0,)
ということなのだけど、これを実行するにはどうしたらいいのかなと悩んでいた.
>>> ri.baseenv["eval"]
>>> eval = ri.baseenv["eval"]
>>> eval(expression)
>>> print eval(expression)
>>> eval(expression)[0]
3.0
>>> print eval(expression)[0]
3.0
>>> print eval(expression)[1]
Traceback (most recent call last):
File "", line 1, in
IndexError: Index out of range.
>>> print eval(expression)[0]
3.0
>>> expression = ri.parse('3 + 2')
>>> print eval(expression)[0]
5.0
>>> print eval(expression)
<rpy2.rinterface.SexpVector - Python:0xb7fae1c0 / R:0x86da7b0>
>>> tuple(eval(expression))
(5.0,)
これを使用してforを試してみることにする.