以下のようにデータを付値すると、リストになってしまう.
>>> robjects.globalenv["a"] = [3,2,1]
>>> print robjects.r.a
[[1]]
[1] 3[[2]]
[1] 2[[3]]
[1] 1
以下のようにするがよさげ
>>> print robjects.IntVector([3,2,1])
[1] 3 2 1>>> robjects.globalenv["a"] = robjects.IntVector([3,2,1])
>>> print robjects.r.a
[1] 3 2 1>>> print robjects.r('a')
[1] 3 2 1>>> print robjects.r('a[1]')
[1] 3
下のようなやり方もあるけど、データがばかでかい場合にはあまりよろしくない
>>> robjects.Vector([3,2,1]).r_repr()
'list(3L, 2L, 1L)'
>>> tmp = robjects.Vector([3,2,1]).r_repr()
>>> tmp
'list(3L, 2L, 1L)'
>>> robjects.r('a <- %s' % tmp)
>>> print robjects.r('a')
[[1]]
[1] 3[[2]]
[1] 2[[3]]
[1] 1
時間を計測
import datetime
testdata = range(100000,0,-1)
roInt = robjects.IntVector(testdata)
now = datetime.datetime.now()
tmp = roInt.r_repr()
robjects.r('a <- %s' % tmp)
print datetime.datetime.now() - nownow = datetime.datetime.now()
robjects.globalenv["a"] = roInt
print datetime.datetime.now() - now
>