在 python 中调用 CCF 函数
calling CCF function in python
我正在尝试使用 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
任何有关如何纠正此问题的建议都很好。
试试这个:
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))
解释:
- 首先,如果您这样做
ro.Vector(tuple(x))
,您将得到一个不同的错误。
NotImplementedError: Conversion 'py2ri' not defined for objects of type ''
至少我的 python (3.7.0) 版本是这样。所以这可能不是你想要的。
- 如果把这两个变量从列表做成Vector再交给R,其实就是列表的列表(每个元素都是自己的1元列表)。所以你需要
unlist()
才能申请ccf()
。请注意,在这种情况下,您实际上确实收到了报告的错误。
我正在尝试使用 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
任何有关如何纠正此问题的建议都很好。
试试这个:
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))
解释:
- 首先,如果您这样做
ro.Vector(tuple(x))
,您将得到一个不同的错误。
NotImplementedError: Conversion 'py2ri' not defined for objects of type ''
至少我的 python (3.7.0) 版本是这样。所以这可能不是你想要的。
- 如果把这两个变量从列表做成Vector再交给R,其实就是列表的列表(每个元素都是自己的1元列表)。所以你需要
unlist()
才能申请ccf()
。请注意,在这种情况下,您实际上确实收到了报告的错误。