У меня есть следующий кусок кода в качестве теста здесь
library(data.table)
set.seed(1)
dt <- data.table::data.table(letters = sample(LETTERS,200,replace = TRUE),numbers = sample(1:1000,200,replace = TRUE))
sortcols <- c("letters","numbers")
setkeyv(dt,sortcols)
dt
# letters numbers
# 1: A 258
# 2: A 400
# 3: A 429
# 4: A 496
# 5: B 72
# ---
#196: Z 142
#197: Z 462
#198: Z 583
#199: Z 665
#200: Z 954
dt[letters=="A"][,numbers := numbers/2]
dt2 <- dt[letters=="A"][,numbers := numbers/2]
dt[letters=="A"]
# letters numbers
#1: A 258
#2: A 400
#3: A 429
#4: A 496
dt2
# letters numbers
#1: A 129.0
#2: A 200.0
#3: A 214.5
#4: A 248.0
То, что я пытаюсь понять здесь, это
- Почему оператором ссылки: = здесь используется как
dt [буквы == "A"] [, цифры: = цифры / 2]
не влияет на базовую таблицу данных dt (и столбец чисел остается одинаковым для всех букв == "A"), тогда как когда я делаю копию этого файла как dt2, это отражается в результате копирования (то есть числах). столбец в dt2 был разделен на 2 для всех букв == "A", что было первоначальным намерением кода). Разве функция ссылочного оператора: = не влияет на базовую таблицу данных без копирования?
- Можно ли не сделать копию таблицы данных и при этом использовать цепочку и: = для чего я пытаюсь выполнить?