0

我有这样的 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。是否有某种可用的脚本?小脑袋开始会很棒。谢谢

4

3 回答 3

4

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

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

  1. 像这样的代码dz_vec <- dz_vec[!is.na(dz_vec)]变成了一个列表理解(尽管你必须有一个约定用于什么NA,这在 Python 中不存在,因此是一种测试这种情况的方法)。
  2. length()变成len().
  3. sapply变成一个列表理解。
  4. mean和之类的函数sd可用于numpy(或者很容易自己编写)。
于 2013-03-08T21:53:02.193 回答
3

你不需要转换它,你可以使用rpy从 python 调用它

于 2013-03-08T21:41:31.247 回答
3

我对这个问题的回答始终是:将其脚本化,然后使用 python 调用脚本subprocess。我喜欢这种方法(而不是安装 RPy),因为 RPy 不能与所有版本的 R 一起工作(这意味着如果您没有足够的运气使用正确的版本,则需要重新创建您的安装),而且您不必安装如果您的 R 脚本已经运行,则可以执行任何操作。

于 2013-03-08T21:46:43.543 回答