如何继续将以下R代码转换为Python?

时间:2013-03-08 21:38:52

标签: python r

我有一个像这样的R代码:

compute_enrichment <- function(dz_vec) {
        dz_vec <- dz_vec[!is.na(dz_vec)]
        n_module_genes <- length(intersect(module_genes,names(dz_vec)))
        module_genes_pct <- n_module_genes/length(module_genes)
        result <- list(escore=NA,norm_escore=NA,pvalue=NA,pct_module_genes=module_genes_pct)
        if (module_genes_pct >= MIN_PCT_MODULE_GENES) {
            result$escore <- abs(sum(dz_vec[module_genes],na.rm=T))
            rand_escores <- sapply(1:N_PERMUTATIONS, function(i) {
                abs(sum(sample(dz_vec,n_module_genes),na.rm=T))
            })
            result$norm_escore <- (result$escore - mean(rand_escores))/sd(rand_escores)
            result$pvalue <- length(which(rand_escores > result$escore))/length(rand_escores)
        }
        result
    }

我想将此代码转换为Python。是否有某种脚本可用于此?开始的小小的头脑会很棒。感谢

3 个答案:

答案 0 :(得分:4)

一般翻译问题很难(我不知道任何自动翻译机制),其他人建议使用rpy是一个很好的建议。

但是,如果您确实需要将此特定代码转换为Python,则此代码的工作变得更容易,因为它不包含许多矢量化操作。要使用的模式是:

  1. dz_vec <- dz_vec[!is.na(dz_vec)]之类的代码变成了列表理解(虽然你必须有一个约定用于NA的用法,这在Python中是不存在的,因此是一种测试方法那个案子)。
  2. length()变为len()
  3. sapply成为列表理解。
  4. meansd等功能在numpy中可用(或者很容易自己编写)。

答案 1 :(得分:3)

您不需要转换它,您可以使用rpy

从python中调用它

答案 2 :(得分:3)

我对这个问题的回答总是:对它进行编写,然后使用subprocess使用python调用脚本。我喜欢这种方法(而不是安装RPy)因为RPy不能使用所有版本的R(这意味着如果你没有足够的幸运能够使用正确的版本重新创建你的安装),你就赢了#如果您的R脚本已经运行,则必须安装任何内容。