使用 rpy2 将 NULL 从 Python 转换为 R



在R中,NULL值通常用作默认值。使用Python和RPy2,如何明确地提供一个NULL参数?

None不可转换(NotImplementedError(,字符串"NULL"将只转换为字符串,并在执行过程中导致错误。

使用 tsintermittent 包以以下示例为例:

import numpy as np
from rpy2.robjects.packages import importr
from rpy2.robjects import numpy2ri
numpy2ri.activate()
tsintermittent = importr('tsintermittent')
crost = tsintermittent.crost
ts = np.random.randint(0,2,50) * np.random.randint(1,10,50)
# implicit ok, default w is NULL
# crost(ts)
# explicit - how to do it?
# RRunTimeError - non numeric argument
crost(ts, w='NULL')
# NotImplementedError
crost(ts, w=None)
可以使用

r 对象导入as.null,然后调用该函数。例如:

from rpy2.robjects import r
as_null = r['as.null']
is_null = r['is.null']
print(is_null(as_null())) #prints TRUE

我没有尝试您的代码,因为它的所有依赖项,但是如果as_null如上所述定义,您应该能够使用

crost(ts, w=as_null())

或者,直接从 robjects 中使用 NULL 对象定义:

import rpy2.robjects as robj
print(is_null(robj.NULL)) #prints TRUE

问题可能是因为 NULL 中的引号。 无法与rpy2核实(由于存在安装问题(。 下面是一个使用pyper的代码

from pyper import *
import numpy as np
r=R(use_pandas=True)
ts = np.random.randint(0,2,50) * np.random.randint(1,10,50)
r('library(tsintermittent)')
r.assign('ts1', ts)
r('out <- crost(ts1, w = NULL)')
out1 = r.get('out')
out1.keys()
#['frc.out', 'initial', 'weights', 'components', 'model', 'frc.in']

无法使用rpy2测试问题。 可能是反引号将是一个按原样阅读的选项

crost(ts, w = `NULL`)

相关内容

  • 没有找到相关文章

最新更新