将R代码转换为Python脚本

lig*_*win 1 python r rpy2

我得到了以下R代码,我需要将它转换为python并在python环境中运行它,基本上我用rpy2模块完成了这个,但是看起来有点沉闷与python做同样的事情,所以有人能找到更好的方法使用rpy2模块将以下R代码重写为等效的python脚本?

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
    }
}
Run Code Online (Sandbox Code Playgroud)

Wok*_*Wok 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
Run Code Online (Sandbox Code Playgroud)

所以,你想要一个mad可以验证的功能:

mad(x) == median(abs(x-median(x)))
Run Code Online (Sandbox Code Playgroud)

感谢Elenaher(发表评论),这里是代码:

def mad(x):
    return median([abs(val-median(x)) for val in x])
Run Code Online (Sandbox Code Playgroud)

然后,我相信你的计算:

def mymad(x):
    return 1.4826*mad(x)
Run Code Online (Sandbox Code Playgroud)

  • @Mark是,但numpy做到了!如果x是一个numpy数组,你可以写x-np.median(x).否则你可以使用list comprehension:中位数([abs(val-median(x))for val in x]) (5认同)
  • 广泛使用的包numpy提供中位功能(numpy.median)所以不要浪费时间重新发明轮子! (3认同)