Я работаю с rpy2 на Ubuntu 1104. Я следую за COX- файлом. Шаги, заданные в файле, находятся в R. Я должен выполнить те же шаги в python, используя rpy2. Я не получил никакого учебника с rpy2. Мне удалось написать следующее,
from rpy2.robjects.packages import importr
from rpy2.robjects import IntVector, Formula
import rpy2.robjects as ro
cox = importr("survival")
csv = ro.vectors.DataFrame.from_csvfile('Rossi.txt', header=True, sep=' ')
fmla = Formula('Surv(week, arrest) ~ fin + age + race + wexp + mar + paro + prio')
mod_aalison = cox.coxph (fmla, data=csv)
Но я получаю следующую ошибку,
>>> mod_aalison = cox.coxph (fmla, data=csv)
Error in function (formula, data, weights, subset, na.action, init, control, :
No (non-missing) observations
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/rpy2/robjects/functions.py", line 83, in __call__
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/rpy2/robjects/functions.py", line 35, in __call__
res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in function (formula, data, weights, subset, na.action, init, control, :
No (non-missing) observations
Я что-то пропустил? У меня нет опыта работы с R. Я не уверен, что данные в функции coxph должны быть в формате dataframe. Любая помощь приветствуется.
Это ссылка на Rossi.txt
Вы читаете данные, используя read.csv
с sep, установленным в одно пространство, а файл имеет два пробела. Это заставляет R интерпретировать это как существование пустых столбцов, которые затем беспорядок с именами столбцов и, наконец, создают ошибку в coxph
.
Прочитайте данные с помощью read.table
, и все должно быть в порядке.
>>> print csv.colnames [1] "X.week." "X.arrest." "X.fin." "X.age." "X.race." "X.wexp." [7] "X.mar." "X.paro." "X.prio." "X.educ." "X.emp1." "X.emp2." [13] "X.emp3." "X.emp4." "X.emp5." "X.emp6." "X.emp7." "X.emp8."
X <- cbind(var1,var2, ... varn)
как решить эту проблему?