'Issue with renaming data.table

So I have the following data.table issue:

library(data.table)
dt1<-data.table(V1=runif(10),V2=sample(10),ID=1:10)
     dt1
                V1 V2 ID
     1: 0.26880759 10  1
     2: 0.59148373  9  2
     3: 0.15106101  8  3
     4: 0.64780998  5  4
     5: 0.09067745  7  5
     6: 0.57337100  2  6
     7: 0.17920313  3  7
     8: 0.87948063  4  8
     9: 0.25167438  1  9
    10: 0.82715461  6 10

and I am wishing to perform a column rename (except one column, namely the "ID").Although names(dt1[,-"ID"]) works OK yielding:

[1] "V1" "V2"

The following command fails:

   names(dt1[,-"ID"])<-c("souksou","mouksou")
   Error in -"ID" : invalid argument to unary operator

Of course the issue is bypassed via:

names(dt1)[!(names(dt1)  %in% "ID")]<-c("souksou","mouksou")

names(dt1)
[1] "souksou" "mouksou" "ID"

My question to the community is why this happens.



Solution 1:[1]

I would suggest another way (and maybe a simpler one).

names(dt1) = gsub('V1', 'souksou', names(dt1))
names(dt1) = gsub('V2', 'mouksou', names(dt1))

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Eldorado