Вопрос

У меня есть данные. Сделайте данные в R. Он содержит много данных: уровни экспрессии генов от многих (125) массивов. Я хотел бы данные в Python, в основном в основном для моей некомпетентности в R и тот факт, что это должно было быть 30-минутной работой.

Я хотел бы работать следующий код. Чтобы понять этот код, знайте, что переменная path Содержит полный путь к моему набору данных, которые, когда загружены, дает мне переменную вызов immgen. Отказ Знать это immgen это объект (биокондерщик ExpressionSet объект) и что exprs(immgen) Возвращает кадр данных с 125 столбцами (экспериментами) и десятками тысяч строк (названные гены). (На всякий случай не понятен, это код Python, используя ROBJECTS.R, чтобы позвонить в код R)

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 Представляли свои данные. Сделайте, что он не преобразует прямо в массив будет достаточно честно - кадр данных имеет больше в нем, чем массив (раунд и колисменты), и поэтому, возможно, жизнь не должна быть этой простотой. Однако я до сих пор не могу выработать, как выполнить преобразование. Документация немного слишком обработана для меня, хотя мое ограниченное понимание заголовков в документах подразумевает, что это должно быть возможно.

Кто-нибудь любые мысли?

Это было полезно?

Решение

Зачем проходить через данные. Красим, когда «EXPRS (Immgen) возвращает A / Matrix / и вашу целью, чтобы ваши данные в матрице?

Передача матрицы на Numpy - это просто (и может быть даже сделано без копирования):http://rpy.sourceforge.net/rpy2/doc-2.1/html/numpy.html#from-rpy2-To-bumpy.

Это должно преодолеть как простоту, так и к повышению эффективности, предложению проходить через текстовое представление численных данных в плоских файлах как способ обмена данными.

Вы, кажется, работаете с классами биокондерпроводников и могут быть заинтересованы в следующем:http://pypi.python.org/pypi/rpy2-bioConductor-extsions/

Другие советы

Это самый простой и надежный способ передачи кадра данных от R в Python.

Для начала, я думаю, что обмен данными через r Bindings - ненужное осложнение. R Обеспечивает простой способ экспорта данных, а также NUMPY имеет приличные методы импорта данных. Формат файла - единственный общий интерфейс, необходимый здесь.

data(iris)
iris$Species = unclass(iris$Species)

write.table(iris, file="/path/to/my/file/np_iris.txt", row.names=F, sep=",")

# now start a python session
import numpy as NP

fpath = "/path/to/my/file/np_iris.txt"

A = NP.loadtxt(fpath, comments="#", delimiter=",", skiprows=1)

# print(type(A))
# returns: <type 'numpy.ndarray'>

print(A.shape)
# returns: (150, 5)

print(A[1:5,])
# returns: 
 [[ 4.9  3.   1.4  0.2  1. ]
  [ 4.7  3.2  1.3  0.2  1. ]
  [ 4.6  3.1  1.5  0.2  1. ]
  [ 5.   3.6  1.4  0.2  1. ]]

Согласно документации (и мой собственный опыт для того, что он стоит) loadtxt. является предпочтительным способом для обычных импорта данных.

Вы также можете перейти к loadtxt. кортеж типов данных (аргумент dtypes.), один элемент в кортеже для каждого столбца. Обратите внимание на «Skiprows = 1» для шага на заголовки столбцов (для loadtxt. Строки проиндексируются от 1, столбцы от 0).

Наконец, я преобразовал фактор DataFrame для целого числа (который на самом деле является основным типом данных для фактора) до экспорта - «Unlass», вероятно, самый простой способ сделать это.

Если у вас есть большие данные (т. Е. Не хотите загружать весь файл данных в память, но все же нужно добраться до него) Структура данных Numpy («MEMMAP») - хороший выбор:

from tempfile import mkdtemp
import os.path as path

filename = path.join(mkdtemp(), 'tempfile.dat')

# now create a memory-mapped file with shape and data type 
# based on original R data frame:
A = NP.memmap(fpath, dtype="float32", mode="w+", shape=(150, 5))

# methods are ' flush' (writes to disk any changes you make to the array), and 'close'
# to write data to the memmap array (acdtually an array-like memory-map to 
# the data stored on disk)
A[:] = somedata[:]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top