有没有人为什么以下代码的结果不同?
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/