2017-07-17 15 views
7

私はpython jupyterノートブックからRパッケージTSdistを実装しようとしています。PythonからRパッケージTSdistを実装する

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] 

これは私にNAを与え、私は警告だ:

/usr/lib64/python3.4/site-packages/rpy2/rinterface/ のinitの.py:186: をRRuntimeWarning:エラー:シリーズはどれ単変量ベクトル

warnings.warn(X、RRuntimeWarning)

でなければなりません適切に実装する方法のアイデア?または、離散フーリエ変換(DFT)、自動回帰係数、実距離(EDR)の編集距離を使用して、Pythonパッケージとの時系列類似度を測定する方法。方法は、this紙に記載されています。

+0

エラーの可能性がある*前* 'distの[0]' 'ERPDistanceを呼び出すとき() 'であり、実行しようとしているRコードによって出されたエラーメッセージはあなたの入力が無効であることを示します。 – lgautier

+1

Rスタジオのこの実装( 'TSdist.ERPDistance(t.values、c.values、g = 0、sigma = 30)')を試してみました。そして、Pythonの実装は、この記事で参照されています:https://stackoverflow.com/questions/5695388/dynamic-time-warping-in-python –

答えて

2

おそらく2つのオブジェクトがメソッドに渡されている理由が考えられます。系列平均をとし、パンダ系列を呼び出すと、valuesを呼び出すと、numpyの配列が返されます。 docsでは、ERPDistanceには配列ではなく数値ベクトルが必要です。

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'> 

は、単にベースRと数値ベクトルとして、一連のキャストやrpy2のFloatVector使用を検討してください:

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) 
関連する問題