将R代码转换为Python脚本

1 投票
3 回答
11367 浏览
提问于 2025-04-16 02:22

我有一段R语言的代码,现在需要把它转换成Python代码,并在Python环境中运行。其实我已经用rpy2这个模块做过了,但感觉用Python做同样的事情有点乏味。所以,有没有人能帮我找到一个更好的方法,把下面的R代码改写成等效的Python脚本,还是用rpy2模块?

mymad <- function (x) 
{
    center <- median(x)
    y <- abs(x - center)
    n <- length(y)
    if (n == 0) 
        return(NA)
    half <- (n + 1)/2
    1.4826 * if (n%%2 == 1) {
        sort(y, partial = half)[half]
    }
    else {
        sum(sort(y, partial = c(half, half + 1))[c(half, half + 
            1)])/2
    }
}

3 个回答

2

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这就像你从冰箱拿出食材,然后把它放到锅里做饭一样。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者我们想要的数据不在我们想要的地方。这就像你打开冰箱,想找牛奶,但发现牛奶放在了最下面的抽屉里,你得把其他东西先拿出来才能找到它。

为了让这个过程更顺利,我们可以使用一些工具和方法来帮助我们更快地找到和处理这些数据。就像在厨房里用刀具和锅具来帮助你做饭一样,这些工具可以让我们的工作变得简单和高效。

总之,处理数据就像做饭一样,需要一些技巧和工具,才能把原材料变成美味的菜肴。

import numpy
# x is the input array
x = numpy.array( [1,2,4,3,1,6,7,5,4,6,7], float ) }
# mad = median( | x - median(x) | )
mad =  numpy.median( numpy.abs( ( x - numpy.median( x ) ) )
3

可能比用numpy或Python写的代码稍慢一点,但实现起来肯定更快,因为不需要重新发明轮子:

# requires rpy2 >= 2.1
from rpy2.robjects.packages import importr
stats = importr('stats')

stats.mad(x)
7

你可以先说明一下你这个函数的目的,它是用来计算中位数绝对偏差的。你所称的mymad其实是对总体标准差的一种近似计算,前提是你假设样本量很大,并且数据是正态分布的。

根据这个网站

def median(pool):
    copy = sorted(pool)
    size = len(copy)
    if size % 2 == 1:
        return copy[(size - 1) / 2]
    else:
        return (copy[size/2 - 1] + copy[size/2]) / 2

所以,你想要一个函数mad来验证:

mad(x) == median(abs(x-median(x)))

感谢Elenaher(给他的评论点个赞),这里是代码:

def mad(x):
    return median([abs(val-median(x)) for val in x])

然后,我相信你正在计算:

def mymad(x):
    return 1.4826*mad(x)

撰写回答