我正在尝试将一些<class 'rpy2.robjects.vectors.Matrix'>
变量转换为Pandas数据帧。
在互联网上有很多关于如何这样做的复制粘贴说明,所有这些都给出了简短的例子:
pandas.rpy.common.load_data("infert")
没有关于"infert"
来自何处的任何信息。
我无法得到关于这个函数的任何文档(为什么没有?),但显然我不能使用它:
summary= r.summary(linear_model)
filtered_summary=summary.rx2("tTable")
print com.load_data("filtered_summary")
给了我:
---------------------------------------------------------------------------
LookupError Traceback (most recent call last)
<ipython-input-68-a087eddd5220> in <module>()
8 #print test1_sum.names
9 print type(r_res)
---> 10 print com.load_data("filtered_summary")
11 #print pd.DataFrame(test1_sum.rx2("tTable"))
12
/usr/lib64/python2.7/site-packages/pandas/rpy/common.pyc in load_data(name, package, convert)
29 r.data(name)
30
---> 31 robj = r[name]
32
33 if convert:
/usr/lib64/python2.7/site-packages/rpy2/robjects/__init__.pyc in __getitem__(self, item)
226
227 def __getitem__(self, item):
--> 228 res = _globalenv.get(item)
229 res = conversion.ri2ro(res)
230 res.__rname__ = item
LookupError: 'filtered_summary' not found
,同时:
summary= r.summary(linear_model)
print com.load_data("summary")
给了我:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-69-b51722281aa4> in <module>()
8 #print test1_sum.names
9 print type(r_res)
---> 10 print com.load_data("summary")
11 #print pd.DataFrame(test1_sum.rx2("tTable"))
12
/usr/lib64/python2.7/site-packages/pandas/rpy/common.pyc in load_data(name, package, convert)
32
33 if convert:
---> 34 return convert_robj(robj)
35 else:
36 return robj
/usr/lib64/python2.7/site-packages/pandas/rpy/common.pyc in convert_robj(obj, use_pandas)
222 return converter(obj)
223
--> 224 raise TypeError('Do not know what to do with %s object' % type(obj))
225
226
TypeError: Do not know what to do with <class 'rpy2.robjects.functions.SignatureTranslatedFunction'> object
所以:
load_data
答案 0 :(得分:4)
我不知道这是否是正确的&#34;使用load_data但我发现如果你的R数据帧(比方说,myRData)存储在默认工作目录的默认工作区(.RData)中,那么你可以使用load_data来加载myRData:
import rpy2.robjects as robjects
import pandas.rpy.common as com
print robjects.r.load(".RData")
myRData = com.load_data('myRData')
您可以使用robjects.r.XXX运行其他R函数,例如robjects.r.getwd()或robjects.r.setwd(&#34; path_to_new_working_directory&#34;),以导航到新的工作目录。
答案 1 :(得分:2)
load_data
函数可用于将数据集加载到R datasets
包中可用的数据框中,因此它是R data()
函数的包装器。
例如:
from pandas.rpy.common import load_data
iris = load_data('iris')
将加载众所周知的虹膜数据集。文档简要提及:http://pandas.pydata.org/pandas-docs/stable/r_interface.html#transferring-r-data-sets-into-python
如果您要转换rpy2.robjects...
,您可以执行以下操作:
from rpy2.robjects import pandas2ri
pandas2ri.activate()
然后转换应该自动发生。或者你可以明确地做:pandas2ri.ri2pandas(rpy2_object)