Как использовать цепочку с помощью ссылки в операторе j (: =), чтобы повлиять на базовую таблицу - PullRequest
0 голосов
/ 03 мая 2018

У меня есть следующий кусок кода в качестве теста здесь

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

То, что я пытаюсь понять здесь, это

  1. Почему оператором ссылки: = здесь используется как

dt [буквы == "A"] [, цифры: = цифры / 2]

не влияет на базовую таблицу данных dt (и столбец чисел остается одинаковым для всех букв == "A"), тогда как когда я делаю копию этого файла как dt2, это отражается в результате копирования (то есть числах). столбец в dt2 был разделен на 2 для всех букв == "A", что было первоначальным намерением кода). Разве функция ссылочного оператора: = не влияет на базовую таблицу данных без копирования?

  1. Можно ли не сделать копию таблицы данных и при этом использовать цепочку и: = для чего я пытаюсь выполнить?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...