如何在函数旁边传递一个参数作为data.table的列名? 例如,我有一个名为data1的数据,其中包含名为' hours'和' location'。在输出中,我想按位置查找异常值,并以“小时”命名。我尝试使用替代(y)等等,输出总是使用' y'作为列名。谁能帮助我?谢谢。
mf<-function(data, y){
newy<-as.name(deparse(substitute(y)))
output<-data[,.(y=boxplot.stats(eval(newy))$out),by=.(location)]
return(output)
}
mf(data=data1,y=hours)
答案 0 :(得分:0)
编写用于选择列的字符值的函数会更好。在这种情况下,您的功能可以重写为:
mf <- function(data, y){
output <- data[, boxplot.stats(get(y))['out'], by = .(location)]
setnames(output, 'out', y)
return(output)
}
通过使用[
对boxplot.stats
的输出进行子集化,返回包含一个元素('out'
)的命名列表。因此output
将有两列:location
和out
。然后,您只需将out
更改为y
的任何内容。
示例:
set.seed(100)
data1 <- data.table(
location = state.name,
hours = rpois(1000, 12)
)
mf(data = data1, y = 'hours')
# location hours
# 1: Delaware 25
# 2: Georgia 21
# 3: Idaho 4
# 4: Massachusetts 5
# 5: Missouri 7
# 6: South Carolina 5
# 7: South Carolina 6
# 8: South Dakota 20
# 9: Texas 5
# 10: Utah 22
非标准评估很棘手,只有你能从中得到一些东西才值得努力。 data.table
在幕后使用它进行优化。 tidyverse
包使用它来允许数据库内处理。如果没有任何好处(除了不必输入几个引号),只需付费。