При переборе всех столбцов в таблице данных R с использованием ссылочной семантики, что имеет больше смысла с точки зрения использования памяти:
(1) dt[, (all_cols) := lapply(.SD, my_fun)]
или
(2) lapply(colnames(dt), function(col) dt[, (col) := my_fun(dt[[col]])])[[1]]
У меня такой вопрос: в (2) я заставляю data.table перезаписывать dt
для столбцов за столбцами, поэтому я предполагаю, что потребуется дополнительная память в порядке размера столбца. Это также относится к (1)? Или все lapply(.SD, my_fun)
оцениваются до того, как исходные столбцы будут перезаписаны?
Пример кода для запуска вышеуказанных вариантов:
library(data.table)
dt <- data.table(a = 1:10, b = 11:20)
my_fun <- function(x) x + 1
all_cols <- colnames(dt)