I have a question about the colnames function in the base package
Let’s say you have a data.frame, as follows:
df <- data.frame(variable = letters[1:100], value = rnorm(100))
As one would expect, colnames(df[1]) returns:
colnames(df[1])
# [1] "variable"
However, it doesn’t seem that assignment is possible when calling a specific column
colnames(df[1]) <- c("test")
colnames(df[1])
# [1] "variable"
Why is that?
The reason your version does not do what you expect is that
df[1]creates a temporary data frame in memory, the colnames function then changes the name of the 1 column in this temporary data frame (not your original data frame), but then nothing else is done with the temporary df so it is silently discarded. Your original data frame was never touched, so the next time you docolnames(df[1])a new temporary df is created copying from your unmodified original and the colname is returned.Changing the order of calling
colnamesand subsetting does what you want as the other answers show.