Примечание
Если вы ожидали, что ваша исходная функция addName
изменит существующий объект следующим образом
x <- data.frame(Column_1 = c(1, 2, 3), Column_2 = c("a", "b", "c"))
# Try (unsuccessfully) to change title of "Column_1" to "Y" in x.
addName(x)
# Print x.
x
имейте в виду, что R передается по значению, а не по ссылке, поэтому сам x
останется без изменений:
Column_1 Column_2
1 1 a
2 2 b
3 3 c
Любая мутация будет достигнута путем перезаписи x
возвращаемым значением функции.
x <- addName(x)
# Print x.
x
в этом случае само x
было бы очевидно изменено:
Y Column_2
1 1 a
2 2 b
3 3 c
Отвечать
Во всяком случае, вот решение, которое компактно включает каналы (%>%
из magrittr
пакет) и пользовательскую функцию. Обратите внимание, что без разрывов строк и комментариев, которые я добавил для ясности, это можно было бы сократить до всего нескольких строк кода.
# The dplyr package helps with easy renaming, and it includes the magrittr pipe.
library(dplyr)
# ...
filenames <- c("filename1.csv", "filename2.csv", "filename3.csv")
# A function to take a CSV filename and give back a renamed dataset taken from that file.
addName <- function(filename) {
return(# Read in the named file as a data.frame.
read.csv(file = filename) %>%
# Take the resulting data.frame, and rename its first column as "Y";
# quotes are optional, unless the name contains spaces: "My Column"
# or `My Column` are needed then.
dplyr::rename(Y = 1))
}
# Get a list of all the renamed datasets, as taken by addName() from each of the filenames.
all_files <- sapply(filenames, FUN = addName,
# Keep the list structure, in which each element is a
# data.frame.
simplify = FALSE,
# Name each list element by its filename, to help keep track.
USE.NAMES = TRUE)
На самом деле, вы можете легко rename
указать любые нужные вам столбцы одним махом:
dplyr::rename(Y = 1, 'X' = 2, "Z" = 3, "Column 4" = 4, `Column 5` = 5)
person
Greg
schedule
09.06.2021
colnames
, см. stackoverflow.com/questions/7531868/ - person Peace Wang   schedule 09.06.2021rename
, см. stackoverflow.com/questions /35023375/ - person Peace Wang   schedule 09.06.2021addName
, ожидая, что R будет передавать по ссылке? То есть вы ожидаете, что ваша функция будет мутировать существующий объектx
, указанный вaddName(x)
в качестве аргумента для параметраdata
. Если это так, это не сработает: R передает по значению, а не по ссылке. Однако строкаdata <- addName(data)
должна работать, как иdata <- data %>% addName()
с пакетомmagrittr
. Вы можетеsapply
использовать этуaddName
функцию в спискеdata.frame
, подобно вашему объектуdata
, а затем сохранить список, которыйsapply
вернет. - person Greg   schedule 09.06.2021