Можно ли удалить объект data.table
по ссылке?Как можно реализовать функцию rm_tbl()
, которая принимает объект data.table
и присваивает NULL
любому имени, указывающему на этот объект в любой среде (которая является потомком globalenv)?
Примеры, которыепо понятным причинам не работают, но, возможно, передают идею того, чего я пытаюсь достичь:
rm_tbl_1 <- function(tbl) {
rm(tbl)
invisible(NULL)
}
rm_tbl_2 <- function(tbl) {
tbl <<- NULL
invisible(NULL)
}
Следующее близко, но это немного хак (также это не приводит к NULL
но с нулевой строкой data.table
)
rm_tbl_3 <- function(tbl) {
tbl[, colnames(tbl) := rep(list(NULL), ncol(tbl))]
invisible(NULL)
}
Для полноты:
dt <- data.table(a = 1:3, b = 2:4)
rm_tbl_1(dt)
dt
rm_tbl_2(dt)
dt
rm_tbl_3(dt)
dt
Редактировать
В соответствии с предложением @Gregor, приведенным выше, некоторые дальнейшие объяснения:Проблема в том, что у меня большой data.table
.Теперь где-то в функции я что-то делаю с этим объектом, например, вызываю data.table::split()
, и мне больше не нужна оригинальная data.table
.Кроме того, чтобы выполнить дальнейшие преобразования моих данных, мне нужна память назад оригинала data.table
.Как мне это сделать?
Пример:
fun_a <- function() {
dt <- data.table(a = 1:2, b = 2:3)
fun_b(dt)
}
fun_b <- function(tbl) {
temp <- split(tbl, by = "b")
rm_dt(tbl)
do_stuff_with_dt(temp)
}
fun_a()
Это проясняет ситуацию?Прошу прощения, что не прояснил с самого начала.