从R到rpy2的转换函数

2024-05-29 10:45:34 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨!我在R中使用了一个名为stylo的包,用于Stylemetric目的(基本上是机器学习,用于根据词法频率识别文学作者),但我在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中,我知道如何调用library和函数stylo,但我不知道如何定义函数cosine.delta。有什么想法吗?我试过这样的事情:

^{pr2}$

它说{是无效语法。我一直在尝试不同的东西(其他类型的括号,使用

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

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


Tags: the函数目的机器baselibrary语法delta
1条回答
网友
1楼 · 发布于 2024-05-29 10:45:34

您可以通过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\")')

这基本上只是R代码(用cosinedelta而不是cosine.delta,不确定这是否重要),包装在''' '''中使其成为python中的多行字符串,R( )将其包装成R代码执行。在

最后一行代码的工作方式类似。为了安全起见,我将反斜杠放在应该直接传递到R中的引号前面,以确保python不会尝试对它们做任何有趣的事情,而是将它们按应该的方式传递给R。在

对于这个答案,我基本上改编了documentation中的一个例子,你自己来看看可能也很有用。在

相关问题 更多 >

    热门问题