当将对象强制转换为xts时,无法获取对象名称

时间:2014-01-29 03:28:39

标签: r xts

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

重现错误的代码:

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 个答案:

答案 0 :(得分: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"
相关问题