2

谁能解释一下下面的 R 代码中发生了什么以及为什么?

a <- seq(as.Date('2000-01-01'),as.Date('2001-01-01'),'day')
b <- seq(as.Date('2000-01-01'),as.Date('2002-01-01'),'day')
a <- as.xts(1:NROW(a),a)
b <- as.xts(1:NROW(b),b)

NROW(b[index(a)])
d <- b>100
NROW(d[index(a)])
d <- cbind(b>100,b>100)
NROW(d[index(a)])
d <- cbind(b>100,b)
NROW(d[index(a)])
d <- cbind(b,b>100)
NROW(d[index(a)])
d <- cbind(b,b)
NROW(d[index(a)])

由于某种原因,如果 xts 对象在第一列中存储逻辑值,则使用日期向量对 xts 对象进行子集化会失败。我知道带有逻辑向量的子集

NROW(d[index(d) %in% index(a)])

有效,我很好奇为什么使用带日期的向量不起作用。

4

1 回答 1

1

看起来像一个错误。逻辑运算符正在tzone从索引中删除属性,这导致它们略有不同。例如,比较:

> attributes(.index(b))
$tzone
[1] "UTC"

$tclass
[1] "Date"

> attributes(.index(b-1))
$tzone
[1] "UTC"

$tclass
[1] "Date"

> attributes(.index(b>1))
$tzone
[1] ""

$tclass
[1] "Date"
于 2013-04-30T15:27:46.423 回答