我正在尝试将R代码的一部分转换为Python。在此过程中,我面临一些问题。
我有一个R代码,如下所示。在这里,我将我的R输出保存为 .rdata 格式。
nms <- names(mtcars)
save(nms,file="mtcars_nms.rdata")
现在我必须将mtcars_nms.rdata加载到Python中。 我导入了rpy2模块。然后,我尝试将文件加载到python工作区中。但是看不到实际输出。
我使用以下python代码导入 .rdata 。
import pandas as pd
from rpy2.robjects import r,pandas2ri
pandas2ri.activate()
robj = r.load('mtcars_nms.rdata')
robj
我的python输出是
R object with classes: ('character',) mapped to:
<StrVector - Python:0x000001A5B9E5A288 / R:0x000001A5B9E91678>
['mtcars_nms']
现在我的目标是从mtcars_nms中提取信息。
在R中,我们可以使用
load("mtcars_nms.rdata");
get('mtcars_nms')
现在我想在Python中做同样的事情。
答案 0 :(得分:3)
有一个新的python软件包pyreadr,可以非常轻松地将RData和Rds文件导入python:
import pyreadr
result = pyreadr.read_r('mtcars_nms.rdata')
mtcars = result['mtcars_nms']
它不依赖于安装R或其他外部依赖项。 它是C库librdata的包装,因此非常快。
您可以使用pip轻松安装它:
pip install pyreadr
此仓库位于https://github.com/ofajardo/pyreadr
免责声明:我是开发商。
答案 1 :(得分:2)
我不建议使用feather而不是使用.rdata
格式,它可以在R和Python之间有效地共享数据。
在R中,您将运行以下命令:
library(feather)
write_feather(nms, "mtcars_nms.feather")
在Python中,要将数据加载到pandas
数据框中,然后可以简单地运行:
import pandas as pd
nms = pd.read_feather("mtcars_nms.feather")
答案 2 :(得分:0)
R函数load
将返回已加载对象(导入GlobalEnv)的名称的R向量。
您将不得不在rpy2中完成与R中相同的工作:
R:
get('mtcars_nms')
Python / rpy2
robjects.globalenv['mtcars_nms']