我有一个错误,只有当我通过 rpy2 从用户定义的函数调用 lrtest(来自 lmtest 包)时才会发生错误。
回复:
continuous.test <- function(dat) {
require('lmtest')
options(warn=-1)
model <- lm(formula='pheno ~ .', data=dat)
anova <- lrtest(model,'interaction')
pval <- anova$"Pr(>Chisq)"[2]
}
当我从 R 解释器调用这个函数时,一切运行正常。但是,从以下 python 代码片段调用时收到错误消息。请注意,这个特定的 python 文件成功地对 rpy2 进行了许多其他调用。
Python:
...
kway_dat = R.DataFrame(dataframe) # this is a valid dataframe, it's used in other calls.
...
R.r("source('/path/to/user/defined/file/perm_test.r')")
continuous_test = R.r['continuous.test']
pval = continuous_test(kway_dat)
错误:
Error in is.data.frame(data) : object 'dat' not found
Traceback (most recent call last):
File "./test_r_.py", line 83, in <module>
pval = continuous_test(kway_dat)
File "/usr/lib/python2.6/site-packages/rpy2-2.2.6dev_20120806-py2.6-linux-x86_64.egg/rpy2/robjects/functions.py", line 82, in __call__
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
File "/usr/lib/python2.6/site-packages/rpy2-2.2.6dev_20120806-py2.6-linux-x86_64.egg/rpy2/robjects/functions.py", line 34, in __call__
res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in is.data.frame(data) : object 'dat' not found
故障排除:
- 我已经在 R 中测试了代码,一切正常。
- 我通过 rpy2 将数据帧从 python 传递到 R 并从 R 函数调用 is.data.frame(dat),它返回 true,所以问题出在 lmtest 或 lrtest + rpy2 上。
任何帮助都会很棒。谢谢大家!