将向量和参数从Python传递到R函数

2024-10-16 17:15:01 发布

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

我正在学习Python和R,在将参数从Python传递到名为“Contours”的R函数时遇到了一个问题。下面的工作。。。。。在

Python(试验报告)在

import rpy2.robjects as robjects
robjects.r('''
       source('Wrapper.R')
''')

r_myfunc = robjects.globalenv['Contours']
r_myfunc()

R(Wrapper.R)

^{pr2}$

因此,正如您所知,我对R代码中的值的硬编码工作得很好,是从Python到R的传递给我的。 我试过了。。。。在

R函数

Contours <- function(k, sens, spec, prev, N, uniqueId)

像这样试图从Python那里通过。。。。在

r_myfunc( c(0,1), c(0.8, 0.9, 0.95, 0.995), 0.8, 0.001, 1, 986)

以及

r_myfunc( "c(0,1)", "c(0.8, 0.9, 0.95, 0.995)", 0.8, 0.001, 1, 986)

这两个都不管用。以前有人遇到过这种情况吗?任何指向正确方向的指示都将不胜感激。 JW公司


Tags: 函数代码importsource编码参数asmyfunc
1条回答
网友
1楼 · 发布于 2024-10-16 17:15:01

您可以像导入包一样导入R源(请参见http://rpy.sourceforge.net/rpy2/doc-2.5/html/robjects_rpackages.html#importing-arbitrary-r-code-as-a-package

import os
from rpy2.robjects.packages import SignatureTranslatedAnonymousPackage

with open('Wrapper.R') as fh:
    rcode = os.linesep.join(fh.readlines())
    wrapper = SignatureTranslatedAnonymousPackage(rcode, "wrapper")

现在要调用该名称空间中的函数Contours,只需使用wrapper.Contours,但必须使用Python语法。在R中,标量是长度为1的向量,但在Python中,标量和序列是完全不同的。在

如果要使用R c()

^{pr2}$

否则:

from rpy2.robjects.vectors import IntVector, FloatVector
wrapper.Contours(IntVector((0,1)),
                 FloatVector((0.8, 0.9, 0.95, 0.995)),
                 0.8, 0.001, 1, 986)

相关问题 更多 >