参考动物园变量名称滞后,连字符与减法混淆

时间:2014-01-07 15:56:29

标签: r zoo

在多变量zoo对象上使用lag函数后,将使用使用连字符的自动命名约定创建新变量。例如,变量var2的滞后将被命名为var2.lag-4,依此类推。问题是,当我想引用此变量时,例如在plot(var2.lag-4)中,它返回错误消息对象var2.lag未找到

我认为这是因为它将连字号视为一个变量名和标量数4之间的减法符号。

是否可以在没有此错误的情况下参考这些滞后的动物园变量?

请注意,我还附加了对象,因此可以直接使用变量名。

这是一个例子

var1 = ts(rnorm(20), start=1995.00, freq=4)
var2 = ts(rnorm(20), start=1995.00, freq=4)
X = cbind(var1, var2) 
newX = lag(as.zoo(X),-1:-4) # lags 1 to 4 of all variables
attach(as.list(newX))
plot(var2.lag-1) 
#Error in plot.window(...) : need finite 'ylim' values
#In addition: Warning messages:
#1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
#2: In min(x) : no non-missing arguments to min; returning Inf
#3: In max(x) : no non-missing arguments to max; returning -Inf

2 个答案:

答案 0 :(得分:1)

您必须告诉plot该字符串是newX列的名称:

plot(newX[ , "var2.lag-1"])

enter image description here

答案 1 :(得分:0)

如果k有名称,那么这些名称将用于创建新的列名称。因此,您可以将名称添加到传递给k的矢量:

k <- -1:-4
# make.names will ensure the column names are syntactically valid
names(k) <- make.names(paste0("lag",k))
newX <- lag(as.zoo(X), k)

并且plot不知道如何处理字符串。你必须传递一个对象来绘制。

plot(newX$var2.lag.1)