首页 > 解决方案 > 有没有办法阻止 rpy2 自动转换所有内容?

问题描述

我正在使用 rpy2 以便能够在 Python 中使用包FMradio。这个包包含一个用于探索性因素分析的特定管道,所以我使用一个函数的输出作为下一个函数的输入。然而,这个包在很大程度上依赖于矩阵上的列名来进行计算。numpy2ri 和 pandas2ri 的自动转换会删除矩阵的列名和行名,因此无法使用此包。

我认为绕过这个问题的最简单方法是不将 R 矩阵转换为 python 数组,而只使用 R 对象,直到我不再需要它为止。有什么方法可以阻止自动转换的发生并仅在 python 上处理 R 对象?

这就是我尝试使用它的方式。X_filt是一个空向量,因为从 R 矩阵到 numpy.array 的转换会从相关性中删除列名。X必须是函数 subSet 才能工作的矩阵,因此不能将其转换为 pandas 数据框。

import rpy2.robjects as ro
from rpy2.robjects import pandas2ri
pandas2ri.activate()

from rpy2.robjects.packages import importr
FMradio = importr("FMradio")
stats = importr("stats")


correlation = stats.cor(X, method = "pearson", use = "pairwise.complete.obs")
correlation_filt = FMradio.RF(correlation, t = 0.9)
X_filt = FMradio.subSet(X, correlation_filt)
regular_correlation = FMradio.regcor(X_filt, 10, verbose = FALSE)

非常感谢!

标签: pythonrpandasrpy2factor-analysis

解决方案


调用activate()实际上是要求 rpy2 转换所有内容。

有关转换的文档概述了转换的工作原理: https ://rpy2.github.io/doc/v3.3.x/html/robjects_convert.html#conversion

如果从和到pandas的转换是您唯一需要的,那么文档中的相关部分可能就足够了: https ://rpy2.github.io/doc/v3.3.x/html/pandas.html


推荐阅读