вызов функции CCF в Python - PullRequest
       5

вызов функции CCF в Python

0 голосов
/ 07 декабря 2018

Я пытаюсь вызвать функцию ccf, используемую в r, с python.

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

Любые предложенияо том, как исправить это было бы здорово.

1 Ответ

0 голосов
/ 07 декабря 2018

Попробуйте:

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).Так что это, вероятно, не то, что вы хотите.

Если две переменные превращаются в векторы из списков и затем передаются в R, они фактически являются списками списков (каждый элемент является собственным списком из 1 элемента).Поэтому вам необходимо unlist(), прежде чем вы сможете подать ccf().Обратите внимание, что в этом случае вы действительно получаете сообщение об ошибке.
...