Python2环境Jupyter中用rpy2调用R的image.plot函数报错求助
解决rpy2调用R的image.plot函数时的AttributeError问题
你碰到的这个错误,核心原因是image.plot并不是R基础包的函数,它属于fields这个扩展包,而且在rpy2里直接用r.image.plot的调用方式也不对——因为你还没加载对应的R包,r对象里根本找不到这个函数。下面是一步步的解决办法:
1. 确保R中安装了fields包
首先得确认你的R环境里已经装了fields包,如果没装,用rpy2就能直接安装:
# 导入R的utils包来安装扩展包 utils = importr('utils') # 指定CRAN镜像安装fields,避免找不到源的问题 utils.install_packages('fields', repos='http://cran.r-project.org')
如果你的R3.3.3版本太旧,最新的fields包可能不兼容,可以指定一个适配旧版本的包版本,比如:
utils.install_packages('fields', version='9.0', repos='http://cran.r-project.org')
2. 导入fields包并正确引用函数
在rpy2里,导入R包后,要把函数名里的点换成下划线(因为Python不允许函数名带点),所以image.plot要写成image_plot:
# 导入fields包 fields = importr('fields')
3. 把numpy数组转换成R可识别的对象
rpy2不能直接用numpy数组给R函数传参,得先转成R的向量和矩阵:
# 转换一维numpy数组为R的浮点向量 r_a = FloatVector(a) r_b = FloatVector(b) # 把二维numpy数组展平后转成R的矩阵,指定行列数 r_c = robjects.r['matrix'](FloatVector(c.flatten()), nrow=2, ncol=2)
4. 调用image_plot函数
现在就可以正常调用函数绘制热力图了:
fields.image_plot(r_a, r_b, r_c)
额外注意事项
- 你的rpy2版本是2.5.6,属于比较旧的版本,记得不要用新版本rpy2的语法(比如
r['image.plot']()这种写法在旧版本里可能有问题),用上面的方式更稳妥。 - 如果运行时还是有警告,可以暂时关闭rpy2的警告:
warnings.filterwarnings("ignore", category=RRuntimeWarning)
内容的提问来源于stack exchange,提问作者user217285
相关产品推荐
相关产品推荐

