함수에 data.table
연산을 포함하는 데 문제가 있습니다. 입력 인수는 data.table 이름과 열/변수 이름입니다.Data.table 및 get() command (R)
get()
명령을 사용하여 data.table을 참조 할 수 있습니다. 그러나 변수 이름에 대해 동일한 명령을 사용하면 효과가 없습니다. 나는 get()
이 열/변수 이름의 경우에는 적합하지 않을 수도 있지만 어떤 명령을 사용해야하는지 고민 중입니다.
편집 됨 : 이제 get()
대신 substitute()
이 포함되었지만 여전히 작동하지 않습니다.
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()
->이 작동합니다. 그러나, 나는 함수 안에서 작동하는 솔루션에 관심이있다. 당신의 도움에 대한
<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>
감사 :
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)
오류 메시지를 생성합니다 작동합니다. 여기
중복 가능성 (http://stackoverflow.com/questions/9705488/using-data-table-와 i-and-j-arguments-in-functions) – Andrie
스레드를 참조 해 주셔서 감사합니다, Andrie. 그러나, 어떻게 든'substitute()'를 사용하면 여전히 작동하지 않을 것입니다. – majom
링크 된 질문에 대한 답변에 제안 사항을 포함 시켜서 질문을 편집하십시오. 그렇지 않으면 중복으로 닫힐 위험이 있습니다. – Andrie