Tôi có một data.frame trong R. Nó chứa rất nhiều dữ liệu: mức biểu hiện gen từ nhiều (125) mảng. Tôi muốn dữ liệu bằng Python, chủ yếu là do sự thiếu năng lực của tôi trong R và thực tế rằng điều này được cho là một công việc 30 phút.rpy2: Chuyển đổi một data.frame thành mảng có nhiều mảng
Tôi muốn mã sau hoạt động. Để hiểu mã này, hãy biết rằng biến số path
chứa đường dẫn đầy đủ đến tập dữ liệu của tôi, khi được tải, cung cấp cho tôi một biến được gọi là immgen
. Biết rằng immgen
là một đối tượng (đối tượng Bioconductor ExpressionSet
) và rằng exprs(immgen)
trả về một khung dữ liệu với 125 cột (thử nghiệm) và hàng chục nghìn hàng (các gen được đặt tên). (Chỉ trong trường hợp nó không rõ ràng, đây là mã Python, sử dụng robjects.r để gọi mã 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)
Mã này chạy, nhưng chỉ đơn giản là expression_data
array([[1]])
.
Tôi khá chắc chắn rằng e
không đại diện cho khung dữ liệu được tạo ra bởi exprs()
do những thứ như:
In [40]: e._get_ncol()
Out[40]: 1
In [41]: e._get_nrow()
Out[41]: 1
Nhưng sau đó một lần nữa ai mà biết được? Thậm chí nếu e
đại diện cho data.frame của tôi, nó không chuyển đổi thẳng thành một mảng sẽ đủ công bằng - một khung dữ liệu có nhiều hơn một mảng (tên và tên) và vì vậy có lẽ cuộc sống không dễ dàng như vậy . Tuy nhiên tôi vẫn không thể tìm ra cách thực hiện chuyển đổi. Các tài liệu là một chút quá terse cho tôi, mặc dù sự hiểu biết hạn chế của tôi về các tiêu đề trong các tài liệu ngụ ý rằng điều này nên có thể.
Bất kỳ ai có suy nghĩ?
argh bạn đúng.Nó là một ma trận.Đó là rực rỡ, cảm ơn.Chỉ cần giải pháp là rõ ràng, tôi có thể làm: e = np .array (robjects.r ('exprs (immgen)')) và bây giờ e là một mảng numpy với tất cả các số dấu chấm động của tôi trong nó.Cảm ơn Laurent! Tôi quan tâm đến các công cụ bioC rpy2, nhưng không thể có được nó Một câu hỏi cho danh sách hỗ trợ mặc dù có thể ... –