[1] "ts(a).a" "ts(a).b" "ts-6ren">
gpt4 book ai didi

r - 为什么 ts 对象的 cbind 与 R 中矩阵和 data.frames 的 cbind 行为不同?

转载 作者:行者123 更新时间:2023-12-02 01:58:41 24 4
gpt4 key购买 nike

有人知道为什么以下代码的结果不同吗?

a <- cbind(1:10,1:10)
b <- a
colnames(a) <- c("a","b")
colnames(b) <- c("c","d")

colnames(cbind(a,b))
> [1] "a" "b" "c" "d"
colnames(cbind(ts(a),ts(b)))
> [1] "ts(a).a" "ts(a).b" "ts(b).c" "ts(b).d"

是这个还是兼容性的原因? xts 和 zoo 的 Cbind 没有这个特性。

我一直接受这个给定的,但现在我的代码中充斥着以下内容:

ca<-colnames(a)
cb<-colnames(b)
out <- cbind(a,b)
colnames(out) <- c(ca,cb)

最佳答案

这正是 cbind.ts 的内容方法呢。您可以通过stats:::cbind.ts查看相关代码, stats:::.cbind.ts , 和 stats:::.makeNamesTs .

我无法解释为什么它会有所不同,因为它不是我写的,但这里有一个解决方法。

cbts <- function(...) {
dots <- list(...)
ists <- sapply(dots,is.ts)
if(!all(ists)) stop("argument ", which(!ists), " is not a ts object")
do.call(cbind,unlist(lapply(dots,as.list),recursive=FALSE))
}

关于r - 为什么 ts 对象的 cbind 与 R 中矩阵和 data.frames 的 cbind 行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18488816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com