我知道“如何更改数据框列表中的名称”的答案已被多次回答。但是,我一直在尝试生成一个函数,该函数可以将任何列表作为参数并更改列表中所有数据框的所有列名。我正在处理大量 .csv 文件,所有这些文件都将具有相同的 3 列名称。我按如下方式分组导入文件:
# Get a group of drying data data files, remove 1st column
files <- list.files('Mang_Run1', pattern = '*.csv', full = TRUE)
mr1 <- lapply(files, read.csv, skip = 1, header = TRUE, colClasses = c("NULL", NA, NA, NA))
我将有 6 个这样的文件组。如果我在单个列表上运行以下代码,指定列表中每个数据框中的列名称将被正确更改。
for (i in seq_along(mr1)) {
names(mr1[[i]]) <- c('Date_Time', 'Temp_F', 'RH')
}
但是,如果我尝试概括该函数(参见下面的代码)以将任何列表作为参数,它就无法正常工作。
nameChange <- function(ls) {
for (i in seq_along(ls)) {
names(ls[[i]]) <- c('Date_Time', 'Temp_F', 'RH')
}
return(ls)
}
当我在 mr1(从上面生成的列表)上调用 nameChange
时,它会将列表的全部内容打印到控制台,并且不会更改列表中数据框中列的名称.我在这里显然遗漏了一些关于 R 内部工作原理的基本知识。我已经尝试了使用和不使用return
的上述函数,并对代码进行了多次修改,但没有一个被证明是成功的。我非常感谢任何帮助,并且真的很想了解问题背后的“原因”。在过去处理将列表作为参数的函数时,我遇到了相当大的麻烦。
非常感谢您提出的任何建设性意见。
最佳答案
我认为这可能是一个非常简单的修复: 首先,概括您用来重命名列的函数。这只需要一次处理一个数据帧。
renameFunction<-function(x,someNames){
names(x) <- someNames
return(x)
}
现在我们需要定义要将每个列名称更改为的名称。
someNames <- c('Date_Time', 'Temp_F', 'RH')
然后我们调用新函数并将其应用于“mr1”列表的每个元素。
lapply(mr1, renameFunction, someNames)
关于您的具体情况,我可能在一些细节上有误,但我以前曾使用过这种方法来解决类似的问题。由于您能够让它在特定情况下工作,我很确定这将很容易使用 lapply
进行推广关于r - 如何更改函数内数据框列表中的列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42403272/