rpy2 不会将“_”翻译成“.”

rpy2 does not translate "_" into "."

我正在尝试使用从 R 使用 rpy2 导入的函数 "read.csv" 读取 Python 中的 csv 文件。

r_read_csv = robjects.r['read.csv']
r_read_csv("initVar.csv", header = True, row_names = 1)

但是,上面的代码 returns 错误消息:

rpy2.rinterface_lib.embedded.RRuntimeError: Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
    unused argument (row_names = 1)

在 R 中,参数的名称是 row.names。但是,我不能使用点,因为它在 Python.

中的含义不同

我以为rpy2把“_”翻译成了“.”。至少那是我从他们 documentation 那里了解到的。显然,我错了。

问题:在这种情况下如何指定row.names = 1

我重现了一个有趣的错误! rpy2 中的 read.csv 似乎没有继承其父函数 read.table,因此无法识别 row_names 参数。但是,您可以使用 read.table 确保指定默认值 read.csv:

read_tbl = robjects.r['read.table']

rdf = read_tbl("/path/to/data.csv", header = True, row_names = 1, sep = ",")

同样,如果您对 utils 包使用 importr 方法:

from rpy2.robjects.packages import importr
...
utils = importr("utils")

rdf = utils.read_table("/path/to/data.csv", header = True, row_names = 1, sep = ",")

但是,以下都不适用于 Python 但适用于 R:

Python

read_csv = robjects.r['read.csv']
rdf = read_csv("/path/to/data.csv", row_names = 1)

utils = importr("utils")
rdf = utils.read_csv("/path/to/data.csv", row_names = 1)

R

df <- read.csv("/path/to/data.csv", row.names = 1)