Создание функции с data.table в R - PullRequest
0 голосов
/ 29 апреля 2018

Я учусь писать функции с библиотекой data.table. После экспериментов я использовал get() для преобразования переменной в объект. Хотите знать, есть ли еще способы реализовать это?

library(data.table)

DT <- data.table(
  V1=rep(letters[1:3],5),
  V2=c(2:16)
)

Test1 <- DT[,.((V2-sd(V2))/(max(V2)-min(V2))), by=.(V1)] # for comparision

Norma <- function(dataset, Vari, group_by){
  dataset[,
          .((get(Vari)-sd(get(Vari)))/(max(get(Vari))-min(get(Vari)))),
          by=.(get(group_by))    
    ]
}


Test2 <- Norma(DT,"V2","V1")

работает, Test1 идентичен Test2.

1 Ответ

0 голосов
/ 29 апреля 2018

Вместо get мы можем указать интересующие столбцы, в которых необходимо применить функцию, в .SDcols, а затем выполнить цикл по столбцам. Здесь это только один столбец, поэтому мы извлекаем этот столбец как вектор, используя [[

Norma <- function(dataset, Vari, group_by){
   dataset[,
      .((.SD[[1]]-sd(.SD[[1]]))/(max(.SD[[1]])-min(.SD[[1]]))),
      by= group_by, .SDcols = Vari  
   ]
 }

identical(Norma(DT, "V2", "V1"), Test1)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...