我正在尝试使用rpy2在“ YieldCurve”包中调用函数“ Nelson.Siegel”。 “ Nelson.Siegel”以一个xts文件(比率)和一个列表(Marurity)作为输入,看来我不得不将熊猫数据帧转换为xts格式,而且我不确定如何实现。而且我不确定是否以正确的方式调用Nelson.Siegel函数。任何帮助将不胜感激。
我尝试使用pandas2ri.activate()将数据类型从pandas更改为r,但似乎需要进一步将其转换为xts格式。我尝试在xts包中导入as.xts,但无法与rpy2一起使用。
import pandas as pd
import numpy as np
from rpy2.robjects.packages import importr
import rpy2.robjects as robjects
base = importr('base')
utils = importr('utils')
utils.install_packages('YieldCurve', repos="http://cran.us.r-project.org")
Yieldcurve= importr('YieldCurve')
NelsonSiegel = robjects.r('Nelson.Siegel')
from rpy2.robjects import pandas2ri
pandas2ri.activate()
Maturity=[0.5,1,2]
df = pd.DataFrame(np.random.randint(0,30,size=(10,3)),
columns=["1","2","3"],
index=pd.date_range("20190101", periods=10))
NSParam= NelsonSiegel(df, Maturity)
错误消息:is.finite中的错误(如果来自<-as.numeric(from)的is.character(from)),则错误: 未为“列表”类型实现默认方法
答案 0 :(得分:0)
指定Maturity
应该是向量,而不是让转换器认为需要列表可以解决此问题:
Maturity=robjects.vectors.IntVector([0.5,1,2])
否则,首先检查您的熊猫数据帧是否已安全地转换为R数据帧:
df = pd.DataFrame(np.random.randint(0,30,size=(10,3)),
columns=["1","2","3"],
index=pd.date_range("20190101", periods=10))
base.print(df)