2016-10-20 2 views
1

Je souhaite appeler une fonction de R qui nécessite un objet Date. J'ai du mal à appeler cette fonction en utilisant Rpy2.Comment passer une date à R à partir de Python en utilisant rpy2

Voici un exemple: Une fonction R qui prend une date

d <- as.Date("2009-08-17") 
format(d, "%d/%m/%Y") 
[1] "17/08/2009" 

Maintenant, je veux appeler cette fonction de python

import datetime as dt 
import rpy2.robjects.packages as rpackages 
base = rpackages.importr("base") 
d = dt.date(year=2009, month=8, day=17) 
base.format(date, format = "%d/%m/%y") 

La dernière ligne lève l'exception

NotImplementedError: Conversion 'py2ri' not defined for objects of type '<class 'datetime.datetime'>' 

Des idées comment je peux passer des dates de python à fonctionner dans R attend des arguments as.Date (xxx)? Fyi - Je ne cherche pas de code python pur pour convertir le format de la chaîne de date. Je veux savoir comment transmettre des dates via rpy2

Répondre

3

Actuellement, vous n'exécutez pas la fonction as.Date(), traduite par base.as_Date(). Pensez à le faire, puis formater en chaîne. Mais d'abord formater l'objet datetime Python à chaîne avec strfttime:

import datetime as dt 
import rpy2.robjects.packages as rpackages 
import rpy2.robjects as robjects 

base = rpackages.importr("base") 
pyDate = dt.date(year=2009, month=8, day=17) 

rDate = base.as_Date(pyDate.strftime("%Y-%m-%d")) 
rStr = base.format(rDate, format = "%d/%m/%Y") 

print(robjects.StrVector(rStr).r_repr()) 
# "17/08/2009"