我试图在python脚本中运行一些R代码。要做到这一点,我使用rpy2,但有困难(也可以只调用R脚本,但我也不能让它工作)。下面是R脚本代码,它完成了我希望它执行的操作:
library(ggplot2)
setwd("/dir/")
allelefreqshort <- read.table("allelefreqsshort.txt", header = TRUE)
hist(log10(allelefreqshort$AlleleFreq), xlim = c(-15,0), breaks=20)
这是我的rpy2代码,它绘制的数据,但不是log10,而且x轴太小。你知道吗
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
r = ro.r
outputDir = '/dir'
r.setwd(outputDir)
f = r('read.table("allelefreqs.txt", header = FALSE)')
grdevices = importr('grDevices')
grdevices.png(file="alleleFreq.png", width=800, height=500)
r.hist(f[0], breaks=100, main = '5 Reads', xlab='Variant Freq', ylab='# Vars', log10='x')
grdevices.dev_off()
您可以保持R命令几乎完好无损,但是在Python之间处理对象的方式不同。考虑以下rpy2和Rscript命令行解决方案:
RPY2
RScript
或者,您可以运行子进程,并使用R的自动可执行文件RScript.exe通过命令行调用R脚本。您甚至可以将参数传递到R脚本中,以便R与
commandArgs()
一起使用。你知道吗这里
f
是一个R数据帧,它本质上意味着一个R列表,其中所有元素都是R向量(每个元素都是表中的一个“列”),所有这些向量都具有相同的长度。你知道吗执行
f[0]
将返回一个长度为1的列表,因为这就是R将要做的事情(R有[
和[[
到目前为止,我还不确定Python端的[
是否应该像R的[
或[[
那样工作,但对于另一个线程来说是这样的)。f.rx2(1)
将返回所需的内容(请参阅http://rpy2.readthedocs.org/en/version_2.7.x/vector.html#extracting-elements处rpy2和数据帧的文档,请注意R序列是1偏移量,而Python向量是0偏移量)。你知道吗相关问题 更多 >
编程相关推荐