假设我有这个动物园载体
mine <- zoo(c(rep(0,4),rep(1,4),rep(0,5),rep(1,23),rep(0,4),rep(1,2)),as.chron(seq(1:42)))
我想以某种顺序提取几个元素
> mine[14]
01/15/70
1
> mine[5]
01/06/70
1
> mine[41]
02/11/70
1
它有效! 但现在我尝试以不同的方式做到这一点
zz <- c(14, 5, 41)
mine[zz]
01/06/70 01/15/70 02/11/70
1 1 1
我不知道为什么我会以不同的顺序得到它。 我怎样才能保留我想要的订单,我的清单顺序? 我不介意它是列表,矢量,列数还是行数,但我想按照我要求的顺序得到它。
欢呼声
答案 0 :(得分:4)
为什么动物园这样做的答案是它有一个函数[
([.zoo
)的方法,它从子集化值创建一个新的动物园对象,它在逻辑上想要重新排序所以它是一个有效的动物园对象。
您可以通过相关的访问者功能访问时间索引和数据来实现您的目标:
> index(mine)[c(14, 5, 41)]
[1] 01/15/70 01/06/70 02/11/70
> coredata(mine)[c(14, 5, 41)]
[1] 1 1 1
如果你想把它组合成一个步骤,那就写下你自己的乐趣:
myExtract <- function(x, want) {
out <- coredata(mine)[want]
names(out) <- index(x)[want]
out
}
给出了:
> myExtract(mine, want = c(14, 5, 41))
01/15/70 01/06/70 02/11/70
1 1 1