2017-07-17 30 views
7

python jupyter notebook'dan R paketini TSdist uygulamaya çalışıyorum. Python'dan TSdist R paketini uygulayın

import rpy2.robjects.numpy2ri 
from rpy2.robjects.packages import importr 
rpy2.robjects.numpy2ri.activate() 

R = rpy2.robjects.r 
## load in package 
TSdist = importr('TSdist') 
## t,c are two series 
dist = TSdist.ERPDistance(t.values,c.values,g=0,sigma =30) 
## dist is a R Boolean vector with one value 
dist[0] 

Bu

bana bir NA verir ve bir uyarı var:

/usr/lib64/python3.4/site-packages/rpy2/rinterface/ init .py: 186: RRuntimeWarning: Hata: seri

warnings.warn (x, RRuntimeWarning)

herhangi tek değişkenli vektörler olmalıdır Düzgün bir şekilde nasıl uygulanacağına dair fikirler? Ya da ayrık Fourier dönüşümleri (DFT), Otomatik regresif katsayısı, gerçek dizide (EDR) Edit mesafesini kullanarak python paketleri ile zaman serisi benzerliğini ölçmek. this kağıdında belirtilen yöntemler.

+0

hata olasılığı * daha önce * 'dist [0]', 'ERPDistance çağrı zaman() 've çalıştırmaya çalıştığınız R kodu tarafından verilen hata mesajı, girişinizin geçersiz olduğunu gösterir. – lgautier

+1

Bu uygulamayı denedim ('TSdist.ERPDistance (t.values, c.values, g = 0, sigma = 30)') R stüdyosundaki fonksiyon ve çalışır. Ve python uygulamasında bu gönderiye başvurulur: https://stackoverflow.com/questions/5695388/dynamic-time-warping-in-python. –

cevap

2

Muhtemelen, yönteme geçirilen iki seri nesnesidir. Serilerin panda serisi olduğunu varsayarsak, values numaralı telefon numol dizisini döndürür. Ve docs uyarınca, ERPDistance dizileri değil sayısal vektörleri bekler.

print(type(pd.Series(np.random.randn(5)))) 
# <class 'pandas.core.series.Series'> 

print(type(pd.Series(np.random.randn(5)).values)) 
# <class 'numpy.ndarray'> 

sadece taban R sayısal vektörler olarak seri dökme veya rpy2 en FloatVector kullanabilirsiniz:

from rpy2.robjects.packages import importr 

R = rpy2.robjects.r 
## load in package 
base = importr('base') 
TSdist = importr('TSdist') 

new_t = base.as_numeric(t.tolist()) 
print(type(new_t)) 
# <class 'rpy2.robjects.vectors.FloatVector'> 

new_c = rpy2.robjects.FloatVector(c.tolist()) 
print(type(new_c)) 
# <class 'rpy2.robjects.vectors.FloatVector'> 

## new_t, new_c are now numeric vectors 
dist = TSdist.ERPDistance(new_t, new_c, g=0, sigma =30)