在python里结构R的数据布局
利用rpy2包,通过python作粘合剂,利用R的计较成果,个中常用的一步是在python中作好某个数据的预处理惩罚之后传给R作进一步处理惩罚。根基数据布局长处理惩罚,贫苦的是荟萃型的数据布局,因为两者的数据名目界说不太一样,好比python常用的荟萃型数据布局是tuple, list, dict,而R是vector, list, array, data.frame等。所以在rpy2.robjects包下筹备了一些转换工具,如RVector, RArray, RDataFrame等等。实际上大大都R挪用的返回都是用这些工具暗示的。
给R历程通报一个RVector工具较量简朴,结构一个RVector工具,结构时通报一个list就完了。较量贫苦的是在python里生成data.frame数据布局,要领有两种,一是操作RDataFrame的结构函数,在python中直接生成,但需要给它通报一rinterface.SexpVector工具,这是一个rpy2的底层工具,我嫌贫苦没管它;另一种要领是在内嵌的R历程中生成,然后返回给python。示例代码如下:
>>> d = {‘value’: robjects.IntVector((1,2,3)),
‘letter’: robjects.StrVector((‘x’, ‘y’, ‘z’))}
>>> dataf = robjects.r[‘data.frame’](**d)
>>> print(dataf.colnames())
[1] “letter” “value”
留意这样方法转换已往的data.frame列序跟你在python里的排序大概是纷歧样的,这是因为python的dict的key原来就是无序的,假如忽略这点,有大概在R代码里引入BUG,一种制止的方法是在R代码里只管利用D$name这种键值形式来获取数据,而非D[[1]]这种下标形式。