У меня есть следующие строки кода, который пытается перетасовать столбцы таблицы данных и переименовать их.
rm(list = ls(all.names = TRUE))
cat('\14')
library(data.table)
library(stringr)
DF<-matrix(nrow = 10,ncol=5)
DF<-data.frame(DF)
colnames(DF)<-c(1,2,3,4,5)
DF.Old <- DF
DFID <- DF$`1`
DF$`1` <- NULL
Int.Vals <- colnames(DF)
print(Int.Vals)
Jumble.Int.Vals <- sample(colnames(DF))
DF <- setcolorder(DF,Jumble.Int.Vals)
print(Int.Vals)
При выполнении всего этого вместе из файла сценария (CTRL+SHIFT+S) переменная Int.Vals
, которая была {2,3,4,5}
и не затронута последними тремя строками, перетасовывается как {5,4,3,2}
. Это происходит только тогда, когда я выполняю строки вместе, и этого не происходит, если я выполняю скрипт построчно, где Int.Vals
не изменяется.
Я нахожу это логически непоследовательным. Кто-нибудь может указать, почему это происходит?
colnames
(а также функцияnames
) возвращает ссылку на имена фреймов данных, а не на вектор символов, что является ожидаемым поведением... если вы действительно хотите этого избежать, попробуйтеInt.Vals <- copy(colnames(DF))
я не могу найти в документация или источник, но полное объяснение - person J. Win.   schedule 24.05.2018