简体   繁体   English

将python对象传递给rpy2中的R函数

[英]Passing python objects to R functions in rpy2

I'm working in a Jupyter notebook with Python 2 and want to use rpy2 to plot a heatmap. 我正在使用Python 2在Jupyter笔记本中工作,并希望使用rpy2绘制热图。

import numpy as np
from rpy2 import robjects
from rpy2.robjects import r, pandas2ri
from rpy2.robjects import Formula, Environment
from rpy2.robjects.vectors import IntVector, FloatVector
from rpy2.robjects.lib import grid
from rpy2.robjects.packages import importr, data
from rpy2.rinterface import RRuntimeError
import warnings


a = np.array([1.5,2.3])
b = np.array([4.2,5.1])
c = np.array([[0.3, 0.6],[0.6, 0.3]])

r.image.plot(a,b,c)

gives me the error 给我错误

AttributeError: 'SignatureTranslatedFunction' object has no attribute 'plot'

How do I properly pass the parameters into this function? 如何正确将参数传递给此函数? Specs: rpy2 2.5.6 with R3.3.3 and Python 2.7 规格:带有R3.3.3和Python 2.7的rpy2 2.5.6

That doesn't work because image.plot apparently comes from the package fields . 那是行不通的,因为image.plot显然来自package fields Using image from base R's graphics library, do eg this: 使用image从基础R的graphics库,做到这如:

import numpy as np
from rpy2.robjects.packages import importr
from rpy2.rinterface import RRuntimeError
import rpy2.robjects.numpy2ri
from IPython.display import Image, display
from rpy2.robjects.lib import grdevices

rpy2.robjects.numpy2ri.activate()
grf = importr('graphics')

a = np.array([1.5,2.3])
b = np.array([4.2,5.1])
c = np.array([[0.3, 0.6],[0.6, 0.3]])

with grdevices.render_to_bytesio(grdevices.png, width=1024, height=896, res=150) as img:
    grf.image(a, b, c)
display(Image(data=img.getvalue(), format='png', embed=True))

gives 在此处输入图片说明

To use image.plot , you'd have to run 要使用image.plot ,您必须运行

fields = importr('fields')

and replace grf.image(a, b, c) with fields.image.plot(a, b, c) 并将grf.image(a, b, c)替换为fields.image.plot(a, b, c)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM