使用R的hts包构建层级时间序列时nodes参数报错如何解决
你遇到的报错是因为hts()函数的第二个位置参数默认为nodes,该参数要求传入列表类型,你直接传入了数值向量c(1,1,2,2),不符合参数格式要求才触发错误。
方案1:通过列名拆分层级(用characters参数)
如果你的ts对象列名是按照层级规则拼接的,每一层级的字符长度固定,就可以用characters参数自动拆分层级:
- 必须显式指定参数名
characters =,不能省略,否则R会将传入的向量识别为nodes参数 - 举个例子:如果你的列名规则为「1位一级分类编码+1位二级分类编码+2位三级分类编码」,对应代码如下:
x <- hts(abc, characters = c(1,1,2))
你之前写的c(1,1,2,2)需要根据你实际的列名拆分规则调整数值,每个数值对应每一层级的字符长度,数值个数等于层级数减1(顶层总节点不用计入)。
方案2:手动定义层级结构(用nodes参数)
如果你不需要从列名拆分,直接手动定义每层的节点数即可,nodes参数传入列表,列表的每个元素对应一层(顶层总节点默认1个,不用写入),每个元素的数值代表上一层每个节点对应的子节点数量。
比如你的层级是:顶层1个→第二层2个节点→第二层每个节点下各有2个第三层节点,对应代码为:
x <- hts(abc, nodes = list(2, c(2,2)))
- 注意要保证ts对象的列数和最底层节点总数一致,否则也会触发参数不匹配报错。
内容的提问来源于stack exchange,提问作者Aureon
相关产品推荐
相关产品推荐

