我有一个像这样的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。是否有某种脚本可用于此?开始的小小的头脑会很棒。感谢
答案 0 :(得分:4)
一般翻译问题很难(我不知道任何自动翻译机制),其他人建议使用rpy
是一个很好的建议。
但是,如果您确实需要将此特定代码转换为Python,则此代码的工作变得更容易,因为它不包含许多矢量化操作。要使用的模式是:
dz_vec <- dz_vec[!is.na(dz_vec)]
之类的代码变成了列表理解(虽然你必须有一个约定用于NA
的用法,这在Python中是不存在的,因此是一种测试方法那个案子)。length()
变为len()
。sapply
成为列表理解。mean
和sd
等功能在numpy
中可用(或者很容易自己编写)。答案 1 :(得分:3)
您不需要转换它,您可以使用rpy
从python中调用它答案 2 :(得分:3)
我对这个问题的回答总是:对它进行编写,然后使用subprocess
使用python调用脚本。我喜欢这种方法(而不是安装RPy)因为RPy不能使用所有版本的R(这意味着如果你没有足够的幸运能够使用正确的版本重新创建你的安装),你就赢了#如果您的R脚本已经运行,则必须安装任何内容。