有没有人为什么以下代码的结果不同?

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.tsstats:::.cbind.tsstats:::.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/

10-12 19:46