2014-01-29 75 views
2

我编写了接受时间序列对象的函数,我想将输入数据强制转换为xts格式,但是当我这样做时,deparse(substitute())会变得有问题,它应该返回对象的名称。无法获取对象名称,当将对象强制转换为xt时

代码重现错误:

library(xts) 
data(sample_matrix) 
matrixObj=sample_matrix 

myFunc=function(data){ 
    print(deparse(substitute(data))) 
} 

myFunc(matrixObj) 

[1] “matrixObj” #这就是我想要的。

myFunc2=function(data){ 
    data=as.xts(data)#add this line to coerce data into xts format 
    print(deparse(substitute(data))) 
} 

myFunc2(matrixObj) 

[1] “的结构(C(50.0397819115463,50.2304961977954,50.420955209067,”
[2] “50.3734680543285,50.2443255196795,50.1321122972067,50.0355467742705”
[3]“49.9948860954217,49.9122834457642,49.8852887132391,50.2125821224916 “
[4] ”50.3238453485025,50.4635862266585,50.6172355897254,50.620241173435,“
[5] ”50.7414981135498,50.4805101188755,50.4138129108681,50.3532310036568“
[6] ”50.1618813949374,50.3600836896748,50.0396626712588,50.1095259574076“
[7] “50.2073807897632,50.1600826681477,50.0604060861532,49.9658575219043,” ... ...简称

回答

1

这是因为你修改你的函数的对象,而不是因为对象的类型。传递一个XTS到myFunc的提供期望的结果

library(xts) 
data(sample_matrix) 
matrixObj=sample_matrix 

xtsObj=as.xts(sample_matrix) 

myFunc=function(data){ 

    print(deparse(substitute(data))) 
} 

myFunc(xtsObj) 
#[1] "matrixObj" 

此外,无论是使用不同的变量名称为XTS在你的函数对象或获取变量名后做强制将工作:

library(xts) 
data(sample_matrix) 
matrixObj=sample_matrix 

#use a different variable name for the xts object 
myFunc3=function(data){ 
    xtsdata=as.xts(data) 
    print(deparse(substitute(data))) 

} 

myFunc3(matrixObj) 
#[1] "matrixObj" 

#get the name before doing the coercion 
myFunc4=function(data){ 
    print(deparse(substitute(data))) 
    data=as.xts(data) 

} 

myFunc4(matrixObj) 
#[1] "matrixObj" 
相关问题