« [R][rpy2] pass-by-value-paradigm | メイン | [R][rpy2] rpy2 »

[R][rpy2] rpy2::データをアサインする

以下のようにデータを付値すると、リストになってしまう.

>>> 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() - now

now = datetime.datetime.now()
robjects.globalenv["a"] = roInt
print datetime.datetime.now() - now
>

トラックバック

このエントリーのトラックバックURL:
http://blogs.topaz.ne.jp/mt/MT-3.37-ja/mt-tb.cgi/248