我有以下变量:CFNAIdiff
(初等),HOUSTgr
,INDPROgr
,UMCSENTgr
和UNRATEgr
(它们是增长率)。我想构建一个AR模型,并尝试通过以下方式构建数据框:
dataframe <- data.frame(y = INDPROgr[2:T], INDPROgr = INDRPOgr[1:(T-1)],
HOUSTgr = HOUSTgr[1:(T-1)], UMCSENTgr = UMCSENTgr[1:(T-1)],
UNRATEgr = UNRATEgr[1:(T-1)], CFNAIdiff = CFNAIdiff[1:(T-1)])
但是,我遇到以下问题:
INDPROgr [1:(T-1)]中的错误: 只能将0与负下标混合
我指定错了什么?
答案 0 :(得分:1)
该错误表明您正在尝试对正数和负数进行子集化。让我们举一个简单的例子
dat <- data.frame(A = LETTERS[1:10], B = 1:10)
在本示例中,我们可以像使用自己的代码一样使用标准方法对data.frame进行子集化
dat[0:3,]
,它将返回前3行。这里0被视为空行,因此返回一个空行(与具有null的行不同)
dat[0,]
现在,如果我们错误地以变量T结束子集,并且由于某种原因该变量为0或负数,那么如果要返回任何特定的行,则会出现错误。反过来就是这种情况,以避免诸如
之类的任何冲突。dat[c(-1,1),]
从技术上讲,它试图返回减去第一行的整个数据帧,但包括等于rbind(dat[-1,], dat[1,])
的第一行。
因此,如果我们有一些功能或脚本像您的脚本一样是子集
dataframe<- data.frame( y = INDPROgr[2:T],
INDPROgr = INDRPOgr[1:(T-1)],
HOUSTgr = HOUSTgr[1:(T-1)],
UMCSENTgr = UMCSENTgr[1:(T-1)],
UNRATEgr = UNRATEgr[1:(T-1)],
CFNAIdiff = CFNAIdiff[1:(T-1)])
在T要么为T-1 = -1
等于0的情况下,R都会返回错误,这意味着您在子集1:(-1)
,或者如果T本身为负,则出于相同的原因。
因此,我建议检查代码中某处T变为负还是零。