【问题标题】:calling CCF function in python在python中调用CCF函数
【发布时间】:2018-12-06 21:52:05
【问题描述】:

我正在尝试用 python 调用 r 中使用的 ccf 函数。

from rpy2.robjects.packages import SignatureTranslatedAnonymousPackage

string = """
cc <- function(x,y) {
ccf(x,y)
}
"""

powerpack = SignatureTranslatedAnonymousPackage(string, "powerpack")

调用:

import rpy2.robjects as ro

x = [1,2,3,4,5,5]
y = [5,6,7,8,8,9]

x = ro.Vector(tuple(x))
y = ro.Vector(tuple(y))

print (powerpack.cc(x,y))

错误:

RRuntimeError: Error in x[, (1 + cs[i]):cs[i + 1]] <- xx : 
incorrect number of subscripts on matrix

任何有关如何纠正此问题的建议都会很棒。

【问题讨论】:

标签: python rpy2


【解决方案1】:

试试这个:

from rpy2.robjects.packages import SignatureTranslatedAnonymousPackage
import rpy2.robjects as ro


string = """
cc <- function(x,y) {
xx <- unlist(x, recursive=FALSE)
yy <- unlist(y, recursive=FALSE)
ccf(xx, yy)
}
"""

powerpack = SignatureTranslatedAnonymousPackage(string, "powerpack")

x = [1,2,3,4,5,5]
y = [5,6,7,8,8,9]

x = ro.Vector(x)
y = ro.Vector(y)

print (powerpack.cc(x,y))

解释:

  1. 首先,如果你执行ro.Vector(tuple(x)),你会得到一个不同的错误。

NotImplementedError: Conversion 'py2ri' not defined for objects of type ''

至少对于我的python版本(3.7.0)。所以这可能不是你想要的。

  1. 如果将这两个变量从列表中制成向量,然后交给 R,它们实际上是列表的列表(每个元素都是它自己的 1 元素列表)。所以你需要unlist()才能申请ccf()。请注意,在这种情况下,您确实会收到您报告的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多