我正在使用rpy2
在Python中运行一个R包。函数rMBC.MBCn
最初使用矩阵作为输入,在本例中,矩阵是obs_-dat、mod_-dat和mod_-nf参数。为了运行多维数据的函数,我使用Python中的xarray.apply_ufunc
对rMBC.MBCn
函数进行了矢量化。但是,当我运行下面的脚本时,它在rep
中导致了一个运行时错误。我不太清楚是什么导致了这个错误。我认为这可能是因为数据的结构与R中的原始输入非常不同?由于数据的形状,变量没有被准确地读作“列”?另外,从R脚本rep(trace.calc, ncol(o.c))
,在这种情况下o.c
是obs_-dat
以下是我用于obs_dat的输入说明(类似于mod_dat和proj_dat),它包含2个变量,每个变量有3个维度:
<xarray.Dataset>
Dimensions: (latitude: 101, longitude: 101, time: 240)
Coordinates:
* time (time) datetime64[ns] 1986-01-16T11:00:00 ... 2005-12-16T11:00:00
* longitude (longitude) float32 110.0 110.25 110.5 ... 134.5 134.75 135.0
* latitude (latitude) float32 25.0 24.75 24.5 24.25 ... 0.75 0.5 0.25 0.0
Data variables:
rsns (time, latitude, longitude) float32 102.40908 ... 186.72174
tas (time, latitude, longitude) float32 9.834406 ... 27.176416
Attributes:
CDI: Climate Data Interface version 1.9.6 (http://mpimet.mpg.de/...
Conventions: CF-1.6
history: Wed Feb 24 14:45:36 2021: cdo merge ../OBS/ERA5_ssr_1986-20...
frequency: mon
CDO: Climate Data Operators version 1.9.6 (http://mpimet.mpg.de/...
下面是我使用rpy2
和xarray
运行的脚本以及随后出现的错误
import xarray as xr
import numpy as np
from rpy2.robjects import pandas2ri
from rpy2.robjects.packages import importr
pandas2ri.activate()
rMBC = importr("MBC")
def MBCn_hist(obs_dat,mod_dat,mod_nf):
mbc = rMBC.MBCn(obs_dat,mod_dat,mod_nf,2,qmap_precalc=False,ratio_seq=np.repeat(False,2))[0]
return(mbc)
hist2 = xr.apply_ufunc(MBCn_hist, obs.drop('time'), hist.drop('time'), proj.drop('time'),
input_core_dims=[['time'],['time'],['time']],
output_core_dims=[['time']], vectorize=True,dask='parallelized')
RRuntimeError: Error in rep(trace.calc, ncol(o.c)) : invalid 'times' argument
对于rpy2,类型为
RRuntimeError
的异常是R错误(导致R在代码求值期间停止的错误)。这里似乎是调用rMBC.MBCn()
的时候。错误消息本身来自R代码(在这种情况下是R库MBC
)我建议您首先尝试在不使用
xarray
(使用数据子集)的情况下让呼叫正常工作。这样做的原因是:此外,不鼓励使用
pandas2ri.activate()
(并且不推荐使用)。请改用localconverterrpy2文档中有关于上述内容的更多详细信息或示例
相关问题 更多 >
编程相关推荐