rpy2 RRuntimeError:rep中的错误:“times”参数无效

2024-05-16 21:25:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用rpy2在Python中运行一个R包。函数rMBC.MBCn最初使用矩阵作为输入,在本例中,矩阵是obs_-datmod_-datmod_-nf参数。为了运行多维数据的函数,我使用Python中的xarray.apply_ufuncrMBC.MBCn函数进行了矢量化。但是,当我运行下面的脚本时,它在rep中导致了一个运行时错误。我不太清楚是什么导致了这个错误。我认为这可能是因为数据的结构与R中的原始输入非常不同?由于数据的形状,变量没有被准确地读作“列”?另外,从R脚本rep(trace.calc, ncol(o.c)),在这种情况下o.cobs_-dat

以下是我用于obs_dat的输入说明(类似于mod_datproj_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/...

下面是我使用rpy2xarray运行的脚本以及随后出现的错误

    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


Tags: 数据函数importmodtimedatxarraylatitude
1条回答
网友
1楼 · 发布于 2024-05-16 21:25:04

对于rpy2,类型为RRuntimeError的异常是R错误(导致R在代码求值期间停止的错误)。这里似乎是调用rMBC.MBCn()的时候。错误消息本身来自R代码(在这种情况下是R库MBC

我建议您首先尝试在不使用xarray(使用数据子集)的情况下让呼叫正常工作。这样做的原因是:

  • 这将更容易检查Python转换的情况<-&燃气轮机;R(并在需要时对其进行微调)
  • 并行化需要小心处理。R在很大程度上无法处理多线程,而多处理有时需要小心一点(R共享C库使用全局变量来存储状态和调用堆栈之类的内容-取决于子进程的创建方式,它们之间的共享可能比需要的更多)

此外,不鼓励使用pandas2ri.activate()(并且不推荐使用)。请改用localconverter

rpy2文档中有关于上述内容的更多详细信息或示例

相关问题 更多 >