Python 将函数从R转换为rpy2

Python 将函数从R转换为rpy2,python,rpy2,Python,Rpy2,​你好我在R中使用了一个名为stylo的软件包,用于测风(基本上是基于词法频率识别文学作者的机器学习),但我在Python中使用的是rpy2 在R中,我将执行以下操作: library(stylo) cosine.delta = function(x){ # z-scoring the input matrix of frequencies x = scale(x) # computing cosine dissimilarity

​你好我在R中使用了一个名为
stylo
的软件包,用于测风(基本上是基于词法频率识别文学作者的机器学习),但我在Python中使用的是
rpy2

在R中,我将执行以下操作:

library(stylo)
cosine.delta = function(x){
        # z-scoring the input matrix of frequencies
        x = scale(x)
        # computing cosine dissimilarity
        y = as.dist( x %*% t(x) / (sqrt(rowSums(x^2) %*% t(rowSums(x^2)))) )
        # then, turning it into cosine similarity
        z = 1 - y
        # getting the results
        return(z)
    }
stylo(distance.measure="cosine.delta")
现在在Python中,我知道如何调用
库和函数
stylo
,但我不知道如何定义函数
cosine.delta
。有什么想法吗?我尝试过这样的事情:

import rpy2.robjects as ro
R = ro.r
R.library("stylo")
cosinedelta = R.function(x){
        # z-scoring the input matrix of frequencies
        x = scale(x)
        # computing cosine dissimilarity
        y = as.dist( x %*% t(x) / (sqrt(rowSums(x^2) %*% t(rowSums(x^2)))) )
        # then, turning it into cosine similarity
        z = 1 - y
        # getting the results
        return(z)
}
R.stylo(distance.measure="cosinedelta")
它说
{
是无效的语法。我一直在尝试不同的东西(其他类型的括号,使用

from rpy2.robjects.packages import importr 
base = importr('base')) 

但是什么都不管用我对R或
rpy2
语法都不太了解…

你可以通过
rpy2
运行任何R代码,只需将它放在一个大字符串中,并将该字符串作为参数传递到
R()
中。对于你来说,以下方法应该有效:

import rpy2.robjects as ro
R = ro.r
R.library("stylo")
R('''
    cosinedelta <- function(x){
        # z-scoring the input matrix of frequencies
        x = scale(x)
        # computing cosine dissimilarity
        y = as.dist( x %*% t(x) / (sqrt(rowSums(x^2) %*% t(rowSums(x^2)))) )
        # then, turning it into cosine similarity
        z = 1 - y
        # getting the results
        return(z)
    }
    ''')
R('stylo(distance.measure=\"cosinedelta\")')
将rpy2.robject作为ro导入
R=ro.R
R.图书馆(“stylo”)
R(“”)
余弦德尔塔