Я пытаюсь выполнить R-скрипт из python, в идеале отображать и сохранять результаты. Использование rpy2 было сложной задачей, поэтому я подумал, что просто позвоню напрямую. У меня такое чувство, что мне нужно использовать что-то вроде "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, который читает некоторые ранее сформулированные списки и извлекает матрицы, чтобы сравнить их с помощью этого теста Мантеля (он должен извлечь первую матрицу из 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 ' '