我正在学习用库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相同。
答案 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