[英]Python - integration with rpy2 and 'must be atomic' error
使用軟件包rpy2時出現錯誤
sort.int(x,na.last = na.last,減少=減少,...)中的錯誤:“ x”必須是原子回溯(最近一次調用為last):文件“”,文件“ /”中的第1行usr / lib / python2.7 / dist-packages / rpy2 / robjects / functions.py“,行86,在調用返回super(SignatureTranslatedFunction,self)中。 調用 (* args,** kwargs)文件“ /usr/lib/python2.7/dist-packages/rpy2/robjects/functions.py”,第35行, 調用 res = super(Function,self)。 調用 (* new_args,** new_kwargs)rpy2.rinterface.RRuntimeError:sort.int(x,na.last = na.last,減少=減少,...)中的錯誤:'x'必須是原子的
執行時
file.R_func.rdc([1,2,3,4,5],[1,3,4,5,6],20,1.67)
其中file.py的定義如下:
from rpy2.robjects.packages import SignatureTranslatedAnonymousPackage
string = """
rdc <- function(x,y,k,s) {
x <- cbind(apply(as.matrix(x),2,function(u) ecdf(u)(u)),1)
y <- cbind(apply(as.matrix(y),2,function(u) ecdf(u)(u)),1)
wx <- matrix(rnorm(ncol(x)*k,0,s),ncol(x),k)
wy <- matrix(rnorm(ncol(y)*k,0,s),ncol(y),k)
cancor(cbind(cos(x%*%wx),sin(x%*%wx)), cbind(cos(y%*%wy),sin(y%*%wy)))$cor[1]
}
"""
R_func = SignatureTranslatedAnonymousPackage(string, "R_func")
如何將x和y傳遞給rdc()?
做的時候
file.R_func.rdc([1,2,3,4,5],[1,3,4,5,6],20,1.67)
在將Python對象作為參數傳遞給基礎R函數之前,先執行隱式轉換。
默認情況下, [1,2,3,4,5]
(Python list
)將轉換為R list
並且R列表是“非原子向量”,這意味着列表中的每個元素都可以是任意元素通過反對“原子”類型(例如布爾值(R術語中的“邏輯”),整數,字符串等)來反對
嘗試:
from rpy2.robjects.vectors import IntVector, FloatVector
# FloatVector is imported as an alternative if you need/prefer floats
file.R_func.rdc(IntVector([1,2,3,4,5]),
IntVector([1,3,4,5,6]),
20,
1.67)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.