我想从 python 执行一个 R 脚本,理想情况下显示和保存结果。使用 rpy2 有点困难,所以我想我应该直接调用 R。我有一种感觉,我需要使用“os.system”或“subprocess.call”之类的东西,但我很难解读模块指南。
这是 R 脚本“MantelScript”,它使用特定的统计测试来一次比较两个距离矩阵(distmatA1 和 distmatB1)。这在 R 中有效,尽管我还没有放入迭代位以便以成对的方式通读和比较一堆文件(我真的需要一些帮助,顺便说一句!):
library(ade4)
M1<-read.table("C:\\pythonscripts\\distmatA1.csv", header = FALSE, sep = ",")
M2<-read.table("C:\\pythonscripts\\distmatB1.csv", header = FALSE, sep = ",")
mantel.rtest(dist(matrix(M1, 14, 14)), dist(matrix(M2, 14, 14)), nrepet = 999)
这是我的 python 脚本的相关位,它读取了一些以前制定的列表并拉出矩阵,以便通过这个 Mantel 测试进行比较(它应该从 identityA 中提取第一个矩阵并顺序将其与 identityB 中的每个矩阵进行比较,然后重复与来自identityB的第二个矩阵等)。我想保存这些文件,然后调用 R 程序来比较它们:
# windownA and windownB are lists containing ascending sequences of integers
# identityA and identityB are lists where each field is a distance matrix.
z = 0
v = 0
import subprocess
import os
for i in windownA:
M1 = identityA[i]
z += 1
filename = "C:/pythonscripts/distmatA"+str(z)+".csv"
file = csv.writer(open(filename, 'w'))
file.writerow(M1)
for j in windownB:
M2 = identityB[j]
v += 1
filename2 = "C:/pythonscripts/distmatB"+str(v)+".csv"
file = csv.writer(open(filename2, 'w'))
file.writerow(M2)
## result = os.system('R CMD BATCH C:/R/library/MantelScript.R') - maybe something like this??
## result = subprocess.call(['C:/R/library/MantelScript.txt']) - or maybe this??
print result
print ' '