通过循环使用列表中某些元素的名称设置 xts 对象的 dimnames

set dimnames of an xts object with the names of certain elements in a list through loop

我的问题只是我正在编写的函数的一部分。

我有一个 data.frames 的列表(每个都有自己的数字和日期列),其中包含每周数据或每月数据。我已经将 2 个空对象定义为 "weekly" 和 "monthly",我编写的 for 循环通过它们来找出哪个元素是每周或每月。然后,循环将每个元素分类为 weekly/monthly 并将它们转换为 xts 对象。

library(xts)
weekly = NULL
monthly = NULL
for (i in 1:length(terms.list)) {
diff.days <- difftime(as.Date(terms.list[[i]][2,1]), as.Date(terms.list[[i]][1,1]))
if (diff.days < 10) {
  freq <- 52
  weekly = cbind(weekly, xts(terms.list[[i]][,2], order.by=terms.list[[i]][[1]], frequency=freq))
  } else {
  freq <- 12
  monthly = cbind(monthly, xts(terms.list[[i]][,2], order.by=terms.list[[i]][[1]], frequency=freq))
  }}

所以我最终得到两个 xts 对象,即每周和每月。 我现在想要的是在for循环中包含一行代码,它挑选出每周定义的术语(和每月定义的术语)的colnames并将它们分别设置为每种类型的xts对象的dimnames。

类似于:

dimnames(weekly)[[2]] <- names(terms.list[i])
dimnames(monthly)[[2]] <- names(terms.list[i])

请注意,我希望它位于 for 循环中。我试过了,但它一直给我以下错误:

Error in `colnames<-`(`*tmp*`, value = "jobs") : 
length of 'dimnames' [2] not equal to array extent 

"jobs" 是 data.frame 元素名称之一。

如有任何帮助,我们将不胜感激。

我无法对此进行测试,因为您没有提供 reproducible example,但我认为它应该可以工作。基本上,您需要构造一个 dimname 列表并将其设置在 xts 构造函数中。

library(xts)
weekly <- NULL
monthly <- NULL
for (i in seq_along(terms.list)) {
  term <- terms.list[[i]]
  dimNames <- list(NULL, names(terms.list)[i])
  diff.days <- difftime(as.Date(term[2,1]), as.Date(term[1,1]))
  if (diff.days < 10) {
    freq <- 52
    weekly <- cbind(weekly, xts(term[,2], term[,1], freq, dimnames=dimNames))
  } else {
    freq <- 12
    monthly <- cbind(monthly, xts(term[,2], term[,1], freq, dimnames=dimNames))
  }
}