<p>您可以保持R命令几乎完好无损,但是在Python之间处理对象的方式不同。考虑以下rpy2和Rscript命令行解决方案:</p>
<p><strong>RPY2</strong></p>
<pre><code>import os
import rpy2
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
# CURRENT DIRECTORY OF SCRIPT
cd = os.path.dirname(os.path.abspath(__file__))
# READ IN DATA
allelefreqshort_py = ro.r['read.table'](os.path.join(cd, "allelefreqs.txt"), header=False)
# PASSING PYTHON DF TO R DF
ro.globalenv['allelefreqshort'] = allelefreqshort_py
# OUTPUT PLOT
grdevices = importr('grDevices')
grdevices.png(file="alleleFreq.png", width=800, height=500)
p = ro.r('hist(log10(allelefreqshort$AlleleFreq), xlim = c(-15,0), breaks=20)')
grdevices.dev_off()
</code></pre>
<p><strong>RScript</strong></p>
<p>或者,您可以运行子进程,并使用R的自动可执行文件<a href="https://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html" rel="nofollow">RScript.exe</a>通过命令行调用R脚本。您甚至可以将参数传递到R脚本中,以便R与<code>commandArgs()</code>一起使用。你知道吗</p>
<pre><code>import subprocess
# CURRENT DIRECTORY OF SCRIPT (ASSUMING R SCRIPT IN SAME DIRECTORY)
cd = os.path.dirname(os.path.abspath(__file__))
# COMMAND LINE ARGUMENTS (IF RSCRIPT.EXE IS PATH VARIABLE, LEAVE OUT DIRECTORY)
cmd = ["path/to/RScript", os.path.join(cd, "HistPlotScriptName.R")]
# SUBPROCESS CALL
a = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output,error = a.communicate()
# R CONSOLE OUTPUT PRINTED TO PYTHON CONSOLE
if a.returncode == 0: # SUBPROCESS SUCCESSFUL
print(output.decode("utf-8"))
else: # SUBPROCESS FAILED
print(error.decode("utf-8"))
</code></pre>