as.Date.numeric()中的错误:必须提供'origin'

时间:2020-06-25 16:56:09

标签: r date

我收到了一篇论文,其中包括了R文件的经验结果。但是,尝试运行其代码时遇到一些问题:

data <- vni$R[198:length(vni$R)]; date <- vni$Date[198:length(vni$R)]
l <- length(data)
rw_length <- 52 # 52 weeks (~ 1 year)
bound <- vector()
avr <- vector()
for (i in (rw_length+1):l) {
  AVR.test <- AutoBoot.test(data[(i-rw_length):i],nboot=2000,"Normal",c(0.025, 0.975))
  bound <- append(bound, AVR.test$CI.stat)
  avr <- append(avr, AVR.test$test.stat)
}
lower <- bound[seq(1, length(bound), 2)]
upper <- bound[seq(2, length(bound), 2)]

results <- matrix(c(date[(rw_length+1):l],data[(rw_length+1):l],avr,upper, lower),ncol=5, dimnames = list(c(),c("Date", "Return", "AVR",  "Upper", "Lower")))

然后出现以下错误:`

as.Date.numeric(e)中的错误:必须提供'origin'`

results <- matrix(c(date[(rw_length+1):l],data[(rw_length+1):l],avr,upper, lower),ncol=5, dimnames = list(c(),c("Date", "Return", "AVR", "Upper", "Lower")))

我的数据集是:

          Date       P             R
1   2001-03-23  259.60  0.0000000000
2   2001-03-30  269.30  0.0366840150
3   2001-04-06  284.69  0.0555748690
4   2001-04-13  300.36  0.0535808860
5   2001-04-20  317.76  0.0563146260
...
935 2019-02-15  950.89  0.0454163960
936 2019-02-22  988.91  0.0392049380
937 2019-03-01  979.63 -0.0094283770

您能帮我解决这个问题吗? 非常感谢!

1 个答案:

答案 0 :(得分:0)

matrix中的所有内容都必须是同一类。当数字中有一个字符串时,通常会发现这种情况,其中

m <- matrix(0, nr=2, nc=2)
m
#      [,1] [,2]
# [1,]    0    0
# [2,]    0    0
m[1] <- "a"
m
#      [,1] [,2]
# [1,] "a"  "0" 
# [2,] "0"  "0" 

在这种情况下,您有Date(第一列)和numeric(所有其他?不知道AutoBoot是什么)。而且由于它试图将复杂程度从最低复杂度强制到最高复杂度(从numericDate),因此非Date对象正在转换。

matrix(c(Sys.Date(), 1.1))
# Error in as.Date.numeric(e) : 'origin' must be supplied

我建议尝试将其存储在matrix中从根本上来说是有缺陷的。如果要在数字之间存储Date对象,则有两个选择:

  1. 将其存储为data.frame,其中每一列可以有自己的类。
  2. "Date"数据预先转换为numeric并将其存储为数字。这意味着如果/当您再次需要将日期设为Date类的日期时,则需要as.Date(..., origin="1970-01-01")