簡體   English   中英

Python-與rpy2集成和“必須是原子的”錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM