Я связываюсь с тем, чтобы выполнить R-скрипт из python, идеально отображая и сохраняя результаты. Использование rpy2 было немного трудным, поэтому я подумал, что просто позвоню R напрямую. У меня такое ощущение, что мне нужно будет использовать что-то вроде «os.system» или «subprocess.call», но мне сложно расшифровать руководства по модулям.Запуск программы (R) в Python для выполнения операции (выполнить скрипт)
Вот сценарий R «MantelScript», который использует специальный тест stat для сравнения двух матриц расстояния за раз (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, который читает некоторые ранее сформулированные списки и вытягивает матрицы, чтобы сравнить их с помощью этого теста Мантела (он должен вытащить первую матрицу из идентификатора А и последовательно сравнить ее с каждой матрицей в identityB, затем повторите со второй матрицей из идентификатора B и т. д.). Я хочу сохранить эти файлы, а затем вызвать программу 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 ' '
благодарит за ответ. Я на данный момент решил написать скрипт в R и просто выполнить его после сохранения файлов .csv с помощью python, учитывая, что у меня было ограничение по времени. по-прежнему остается одна проблема с этим кодом, но (как «непрофессионал») было легче работать. – user393200
@ vehicleularlambslaughter.myopenid.c: «С ним легче работать». Это мое мнение. Лучше всего использовать простые конвейеры, где одна программа записывает файл, а другая программа читает файл. Не слишком часто обманывать себя «подпроцессом». –