在一组列上搜索并替换 - 尝试 gsub 时出错

Search-and-replace on a set of columns - getting an error trying to gsub

这是这个问题的后续:

我有以下代码:

library(quantmod)
library(stringr)
stockData <- new.env()
stocksLst <- c("AAB.TO", "BBD-B.TO", "BB.TO", "ZZZ.TO")
nrstocks = length(stocksLst)
startDate = as.Date("2016-09-01")

for (i in 1:nrstocks) {
    getSymbols(stocksLst[i], env = stockData, src = "yahoo", from = startDate)
}

stockData = as.list(stockData)
names(stockData) = gsub("[.].*$", "", names(stockData))
names(stockData) = gsub("-", "", names(stockData))
symbolsLstCl <- ls(stockData)

最后一个 post 让我走到了这一步,非常感谢您的帮助。现在,我正在尝试对列名进行类似的替换,因为 quantmod 在列中包含符号名称:

colnames(stockData$ZZZ)
# [1] "ZZZ.TO.Open"     "ZZZ.TO.High"     "ZZZ.TO.Low"      "ZZZ.TO.Close"    "ZZZ.TO.Volume"   "ZZZ.TO.Adjusted"

我可以使用 colnames 轻松更新其中一个 xts 对象,但我想将其包含在一个循环中,以便我可以对所有对象进行更新。这是我尝试过的方法,但失败了:

eval(parse(text = paste0("colnames(stockData$", symbolsLstCl[i], ")"))) <- eval(parse(text = (paste0("str_replace(colnames(stockData$", symbolsLstCl[i], "), ", "\".TO\", ", "\"\")"))))

我觉得很奇怪,好像我用这个(左边是硬编码的),它有效:

colnames(stockData$ZZZ) <- eval(parse(text = (paste0("str_replace(colnames(stockData$", symbolsLstCl[i], "), ", "\".TO\", ", "\"\")"))))

我暗暗怀疑有更好的方法来更新这些列表中每个元素的所有列。欢迎提出任何建议。谢谢,亚当

allnames <- lapply(stockData, 
                   function(x) names(x) = gsub(".TO", "", names(x)))

# replace column names
for (i in 1:length(stockData)) {
          names(stockData[[i]]) <- allnames[[i]]
}

# print all column names
for (i in 1:length(stockData)) {
          print(names(stockData[[i]]))
}

[1] "AAB.Open" "AAB.High" "AAB.Low" "AAB.Close" "AAB.Volume" "AAB.Adjusted"
[1] "BBD-B.Open" "BBD-B.High" "BBD-B.Low" "BBD-B.Close" "BBD-B.Volume" "BBD-B.Adjusted"
[1] "ZZZ.Open" "ZZZ.High" "ZZZ.Low" "ZZZ.Close" "ZZZ.Volume" "ZZZ.Adjusted"
[1] "BB.Open" "BB.High" "BB.Low" "BB.Close" "BB.Volume" "BB.Adjusted"

已编辑:刚才的输出不正确。

我想这就是你希望得到的。