rpy2 как вызвать as.matrix () - PullRequest
       7

rpy2 как вызвать as.matrix ()

0 голосов
/ 21 ноября 2018

Я использую rpy2 для вызова некоторой функции R из python.Функция R возвращает объект dist.Как мне вызвать as.matrix() из python для результата, который возвращает код R?

import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr
rpy2.robjects.numpy2ri.activate()
Rsession = rpy2.robjects.r
tsclust = importr('TSclust')

X= np.random.random((5,5))
result = Rsession.diss( X , "ACF", p=0.05)

result относится к классу dist.Мне нужна квадратная матрица расстояний, которую я могу получить, вызвав as.matrix() результат.Как мне сделать это с rpy2?

1 Ответ

0 голосов
/ 21 ноября 2018

Я разобрался с одним решением.Это не красиво, но это работает.Мы определяем пользовательскую функцию, которая вызывает as.matrix

from rpy2.robjects.packages import STAP
mfunc = 'myasmatrix <- function(dobj){return(as.matrix(dobj))}'
myasmatrix = STAP(mfunc, "myasmatrix")

np.array(myasmatrix.myasmatrix(rres))
>>> array([[0.        , 0.0663193 , 0.01159857, 0.14378692, 0.10069314],
   [0.0663193 , 0.        , 0.06064907, 0.07965314, 0.03511945],
   [0.01159857, 0.06064907, 0.        , 0.13898505, 0.095319  ],
   [0.14378692, 0.07965314, 0.13898505, 0.        , 0.04757353],
   [0.10069314, 0.03511945, 0.095319  , 0.04757353, 0.        ]])
...