我有一个R脚本,用于编写数据帧。为了简单起见,假设数据帧是用R编写的:
testing = data.frame(x=c(1,2,3), y = c(4,5,6))
我的目标是使用Python代码在此数据框上进行一些建模(显然不是此实际数据框,而是再次使事情保持简单)。因此,我用Python编写了以下代码,以在其中提供R代码:
import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
import rpy2.robjects.packages as rpackages
base = importr('base')
utils = importr('utils')
from rpy2.robjects.lib.dplyr import DataFrame
from rpy2.robjects import pandas2ri
pandas2ri.activate()
...
r = robjects.r
r.source("python-testing_script.R")
这里的省略号表示我正在加载其他必需的程序包,但是对于此问题而言,它们是不必要的。注意python-testing_script.R
是r数据帧的写入位置。
我曾想过,在采购此R代码时,会将Pandas数据框用Python写入我的全局环境中,但是相反,我对环境和以下输出一无所知:
Out[1]:
R object with classes: ('list',) mapped to:
<ListVector - Python:0x00000143B9F98188 / R:0x00000143CD2BE988>
[DataFrame, BoolVector]
R object with classes: ('list',) mapped to:
<ListVector - Python:0x00000143B9F98188 / R:0x00000143CD2BE988>
[DataFrame, BoolVector]
visible: <class 'rpy2.robjects.vectors.BoolVector'>
R object with classes: ('logical',) mapped to:
<BoolVector - Python:0x00000143BFE14048 / R:0x00000143B9DC3DD8>
[ 0]
在这里做什么的任何提示?我总是可以将数据帧写入csv并将CSV文件读取到Python中,但是我认为R和Python一起玩会更有趣。我也意识到,在这种琐碎的情况下,我可以用Python编写数据帧,但是我的实际情况并不那么简单。
答案 0 :(得分:0)
我设法弄清楚了。因此,source
函数将返回R对象,其中之一是我感兴趣的数据帧。因此,我要做的就是把这个小家伙固定在上面:
obj1, obj2 = r.source("python-testing_script.R")
testing = pandas2ri.ri2py(obj1)
这使我的R脚本中的testing
数据帧变成了熊猫数据帧。希望这可以在将来帮助其他相对较新的人使用Python。