阴谋。动物园 "invalid 'ylim' value"

plot. zoo "invalid 'ylim' value"

当我尝试使用 zoo 包绘制时间序列数据时,我遇到了:plot.window(...) 中的错误:无效 'ylim' 值。虽然 plot.zoo 给我错误,但 plot.ts 工作正常。 plot(mydata) 也给出了同样的错误。

已从如下所示的 .csv 文件中加载数据:

    Value
03.01.2011  6.2100
04.01.2011  6.4280
05.01.2011  6.7290
06.01.2011  6.6000
07.01.2011  6.7970
...
mydata <- read.zoo(mydata, sep = "\t", header = TRUE, format = "%d.%m.%Y", fileEncoding = "UTF-16")

head(mydata)

            Value
2011-01-03  6.210
2011-01-04  6.428
2011-01-05  6.729
2011-01-06  6.600
2011-01-07  6.797

dput(mydata)

structure(c(" 6.210", " 6.428", " 6.729", " 6.600", " 6.797", " ..."), 
.Dim = c(2023L, 1L), .Dimnames = list(NULL, "Value"), index = 
structure(c(14977, 14978, 14979, 14980, 14981, ...), class = "Date"), class = "zoo")

来自相同来源和背景的数据 (mydata2) 与 plot.zoo 完美配合。相反,它给了我一些不同的 dput() 输出。 值不在 "quotation marks (also no extra space before a first digit)" 之间,我想知道这是否是问题所在。

head(mydata2)

            Value
2010-12-31 533.99
2011-01-03 541.30
2011-01-04 548.33
2011-01-05 544.73
2011-01-06 556.61

dput(mydata2)

structure(c(533.99, 541.3, 548.33, 544.73, 556.61, ...), 
.Dim = c(2023L, 1L), .Dimnames = list(NULL, "Value"), index = 
structure(c(14974, 14977, 14978, 14979, 14980, ...), class = "Date"), class = "zoo")

我已经使用上面提供的 read.zoo 将数据加载到两个 .csv 文件中。两者都有制表符(“\t”)作为分隔符,日期格式为 03.01.2019(“%d. %m.%Y"), 文件编码 ("UTF-16")。我不明白为什么一个数据加载了额外的 space 和引号,我认为这是 plot.zoo 函数出错的原因。

sapply(readLines(mydata, 6, skipNul = TRUE), charToRaw)

$`\tValue`
[1] 09 43 6c 6f 73 65

$`03.01.2011\t6.2100`
 [1] 30 33 2e 30 31 2e 32 30 31 31 09 36 2e 32 31 30 30

$`04.01.2011\t6.4280`
 [1] 30 34 2e 30 31 2e 32 30 31 31 09 36 2e 34 32 38 30

$`05.01.2011\t6.5900`
 [1] 30 35 2e 30 31 2e 32 30 31 31 09 36 2e 35 39 30 30

$`06.01.2011\t6.6000`
 [1] 30 36 2e 30 31 2e 32 30 31 31 09 36 2e 36 30 30 30

$`07.01.2011\t6.7970`
 [1] 30 37 2e 30 31 2e 32 30 31 31 09 36 2e 37 39 37 30

问题没有提供输入,所以我们无法准确知道发生了什么,但可能有些字符它不理解并在输入中呈现为 space 或根本不呈现所以它认为输入是字符数据。

read.zoo 使用 read.table,如果你用它阅读它,你可能会发现同样的问题。

您可以强制数据为数字。这对我有用:

library(zoo)

z <- structure(c(" 6.210", " 6.428", " 6.729", " 6.600", " 6.797"), 
.Dim = c(5L, 1L), .Dimnames = list(NULL, "Value"), index = 
structure(c(14977, 14978, 14979, 14980, 14981), class = "Date"), class = "zoo")

zz <- zoo(array(as.numeric(coredata(z)), dim(z)), index(z))
str(zz)

给予:

‘zoo’ series from 2011-01-03 to 2011-01-07
  Data: num [1:5, 1] 6.21 6.43 6.73 6.6 6.8
  Index:  Date[1:5], format: "2011-01-03" "2011-01-04" "2011-01-05" "2011-01-06" "2011-01-07"