我有一個問題,包括data.table
在一個函數中的操作。輸入參數是data.table名稱和列/變量名稱。Data.table和get()命令(R)
我可以通過使用get()
命令來引用data.table。但是,對變量名使用相同的命令不起作用。我知道get()
可能不適用於列/變量名,但我堅持使用哪個命令。
編輯:我現在包括substitute()
而不是get()
,它仍然不起作用。
toy_example_fun <- function(d, .expr){
.expr = substitute(.expr)
setkey(get(d), .expr) # ==> doesn't work
d.agg <- get(d)[,list(sum(y), sum(v)), by=.expr] # --> works
}
toy_example_fun("DT", x)
替代方案:quote()
- >這工作。不過,我對可在函數內部工作的解決方案感興趣。
DT <- data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
d <- "DT"
variable <- quote(x)
d.agg <- get(d)[,list(sum(y), sum(v)), by=variable]
儘管,後者替代工作variable <- quote(x)
產生錯誤消息:
<simpleError in doTryCatch(return(expr), name, parentenv, handler): object 'x' not found>
<simpleError in is.scalar(val): object 'x' not found>
<simpleError in is.data.frame(obj): object 'x' not found>
感謝您的幫助。
可能重複(http://stackoverflow.com/questions/9705488/using-data-table- i-and-j-arguments-in-function) – Andrie 2012-08-08 07:09:34
感謝您將我引薦給您的主題Andrie。但是,如果我使用substitute(),它仍然不能工作。 – majom 2012-08-08 08:00:00
請在鏈接問題的答案中加入建議來編輯您的問題 - 否則可能會導致它作爲副本關閉。 – Andrie 2012-08-08 08:00:20