[英]how to pass the argument of a user-defined function to be a column name in data.table?
如何在函數旁邊將參數傳遞為data.table的列名? 例如,我有一個名為data1的數據,其列名為“小時”和“位置”。 在輸出中,我想按位置查找離群值,並以“小時數”命名。 我試過使用replace(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)
最好編寫使用字符值來選擇列的函數。 在這種情況下,您的函數可以重寫為:
mf <- function(data, y){
output <- data[, boxplot.stats(get(y))['out'], by = .(location)]
setnames(output, 'out', y)
return(output)
}
通過使用[
對boxplot.stats
的輸出進行子集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
軟件包使用它來允許數據庫內處理。 如果沒有好處(除了不必鍵入一些引號),那就只有成本了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.