使用rpy调用nasapower的get_power接口时lonlat参数报错求解
解决rpy2调用nasapower::get_power时lonlat参数无效的问题
错误根源在于:R的get_power函数要求lonlat参数是R原生向量类型,但你直接传入了Python列表,rpy2不会自动将Python列表转为R向量,导致函数无法识别参数格式。
修复步骤
- 用rpy2提供的
robjects.FloatVector()将Python的数值列表转为R的数值向量,作为lonlat参数传入; - 同理,
pars参数建议转为R字符向量(部分场景下自动转换可能失效,手动转换更稳妥)。
修改后的完整代码
!pip3 install rpy2==3.5.1 import rpy2.robjects as robjects from rpy2.robjects.packages import importr utils = importr('utils') utils.chooseCRANmirror(ind=1) utils.install_packages('nasapower') nasapower = importr('nasapower') # 将Python列表转为R向量 lonlat_r = robjects.FloatVector([151.81, -27.48]) pars_r = robjects.StrVector(["RH2M", "T2M", "PRECTOTCORR"]) # 调用get_power函数 daily_ag = nasapower.get_power( "ag", lonlat=lonlat_r, pars=pars_r, dates="1985-01-01", temporal_api="daily" )
补充说明
如果需要将返回的R数据框转为Python对象,可以用pandas2ri(需先安装pandas):
from rpy2.robjects import pandas2ri pandas2ri.activate() df = pandas2ri.rpy2py(daily_ag)
内容的提问来源于stack exchange,提问作者Владимир Кузовкин
相关产品推荐
相关产品推荐

