用R中的data.table创建函数

时间:2018-04-29 02:35:42

标签: r data.table

我正在学习用库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 :(得分:3)

我们可以在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