data.table
関数内の操作を含む問題があります。入力引数は、data.table 名と列/変数名です。
コマンドを使用して data.table を参照できますget()
。ただし、変数名に同じコマンドを使用してもうまくいきません。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>
ご協力いただきありがとうございます。