Я хотел бы создать функцию r, которая принимает 2 параметра:
- объект data.table
- инструкция о том, как добавить новые столбцы в таблицу данных.Эти новые столбцы являются преобразованием уже существующих столбцов.
Без функции переноса я мог бы сделать:
# load data.table library
library(data.table)
# the exsample data set
dt <- data.table(mtcars)
# adding some new columns
dt[, `:=`(disp_plus_hp = disp + hp,
drat_plus_wt = drat + wt)]
Я знаю, что могуиспользуйте комбо eval + parse
, чтобы решить мою проблему следующим образом:
# load the exsample data set
dt <- data.table(mtcars)
# character vector of length 1 specifying the transformation
column_transformation = '`:=`(disp_plus_hp = disp + hp,
drat_plus_wt = drat + wt)'
# define a function that takes data table and the above character
# to transform the data table
dt_transformer <- function(data_table, add_columns)
{
data_table[, eval(parse(text = add_columns))]
}
# equivalent to dt[, `:=`(disp_plus_hp = disp + hp,drat_plus_wt = drat + wt)]
dt_transformer(data_table = dt, add_columns = column_transformation)
Теперь есть две причины, по которым я хотел бы улучшить решение:
- Я нехотелось бы, чтобы все преобразования были указаны в одной строке, потому что тогда становится очень трудно читать (список или символьный вектор с одним элементом для каждого преобразования было бы неплохо)
- Я не слишком взволнован использованиемфункции разбора