您的代码几乎可以工作——但是请记住,R创建了您修改的对象的副本(即传递值语义)。因此,您需要显式地将新字符串分配给colname,如下所示:
dataA <- dataB <- data.frame(matrix(1:20,ncol=5))
names(dataA) <- c("foo","code","lp15","bar","lh15")
names(dataB) <- c("a","code","lp50","ls50","foo")
dataList <- list(dataA, dataB)
f <- function(i, xList) {
colnames(xList[[i]]) <- gsub(pattern=c("foo|bar"), replacement=c("baz"), x=colnames(xList[[i]]))
xList[[i]]
}
dataList <- lapply(seq(dataList), f, xList=dataList)
新列表将具有替换名称的数据帧。在替换foo和bar时,只需在gsub中的regex中使用备用模式(“foo_bar”)。
注意,顺便说一下,您不必通过索引到列表中来完成这项工作——只需使用一个直接对列表元素进行操作的函数:
f <- function(df) {
colnames(df) <- gsub(pattern=c("foo|bar"), replacement=c("baz"), x=colnames(df))
df
}
dataList <- lapply(dataList, f)