我在R中有一个数据框,其中包含许多(125个)阵列的基因表达水平等大量数据。我想使用Python处理数据,主要是因为我对R不熟悉,而且这应该是一个30分钟的工作。
我希望以下代码能够正常工作。为了理解此代码,请注意变量
我希望以下代码能够正常工作。为了理解此代码,请注意变量
path
包含我的数据集的完整路径,加载后会给我一个名为immgen
的变量。请注意,immgen
是一个对象(Bioconductor ExpressionSet
对象),而exprs(immgen)
返回一个具有125列(实验)和数万行(命名基因)的数据框。(如果不清楚,这是使用robjects.r调用R代码的Python代码)import numpy as np
import rpy2.robjects as robjects
# ... some code to build path
robjects.r("load('%s')"%path) # loads immgen
e = robjects.r['data.frame']("exprs(immgen)")
expression_data = np.array(e)
这段代码可以运行,但是expression_data
只是一个简单的array([[1]])
。
我相信e
不代表由exprs()
生成的数据帧,因为有以下原因:
In [40]: e._get_ncol()
Out[40]: 1
In [41]: e._get_nrow()
Out[41]: 1
但是谁知道呢?即使e
代表我的数据框,它不能直接转换为数组也是可以理解的 - 数据框比数组更复杂(有行名和列名),所以也许生活不应该这么简单。然而我仍然无法弄清如何执行转换。文档对我来说有点太简略了,虽然我对文档中的标题的有限理解暗示着这应该是可能的。
有人有想法吗?