我正在使用rpy2从R库运行一个方法。根据文件:
method_name(x, range.x)
x: a two-column numeric matrix.
range.x: a list containing two vectors.
其中包括一个例子:
data(geyser, package="MASS")
x <- cbind(geyser$duration, geyser$waiting)
est <- method_name(x, range.x)
我检查了geyser$duration
和geyser$waiting
的类型,它们都是double
。我还尝试用R中的{
在我当前的Python代码中,我有:
import numpy as np
import rpy2.robjects as robjects
import rpy2.robjects.packages as rpackages
from rpy2.robjects.vectors import StrVector, FloatVector, ListVector # I tried these before too
from rpy2.robjects import numpy2ri, pandas2ri
numpy2ri.activate()
pandas2ri.activate()
base = rpackages.importr(('base'))
a = np.array([1.2, 2.1, 2.5]); b = np.array([5.2, 1.3, 2.15])
x = base.cbind(base.c(a), base.c(b))
ranges = base.range(x)
result = method_name(x, ranges)
如您所见,我正试图使我的代码尽可能类似于示例。然而,我无法使这种方法起作用。我得到了错误Error in seq.default(a[2L], b[2L], length = M[2L])
,这可能与参数中的问题有关
ranges
有一个明显的问题,因为它只包含两个值,x
的最小值和最大值,但是,它应该包含两个最小值和最大值(矩阵的每列一对)。我可以这样做:
ranges = base.cbind(base.range(a), base.range(b))
但这意味着我创建矩阵的方式存在问题。否则,我只需使用base.range(x)
就可以得到两对值
我也试过x = robjects.r.matrix(x, ncol = 2)
,但没有成功。调用range
时,我仍然只得到整个矩阵的全局最小值和最大值
创建此矩阵以便该方法可以运行的正确方法是什么
根据
range
函数的文档,它接受作为输入向量的(一维数组)。因此,它可以通过将其应用于矩阵的每一列或首先直接应用于a
和b
元素来工作,正如您所提到的。因此,第二种方法应该有效相关问题 更多 >
编程相关推荐