2016-12-20 1 views
3

이름이 변수에있는 일부 열에 함수를 적용하고 싶습니다. 내가 eval()로 선택할 수는 있지만 함수에 전달할 수는 없다.변수를 통해 열 이름을 data.table 내의 함수에 전달하는 방법은 무엇입니까?

library(data.table) 
dt <- data.table(col1 = 1:10) 
mnem <- colnames(dt)[1] 

# This works fine 
dt[, eval(mnem)] 

# None of these works 
dt[, sum(mnem)] 
dt[, sum(mnem), with = FALSE] 

dt[, sum(eval(mnem))] 
dt[, sum(eval(mnem)), with = FALSE] 
+0

'의 DT [, 합 (.SD), .SDcols = mnem]' – user2957945

+3

메시지 당신이 볼 수 있습니다 " verbose "설정을 사용하고 그룹 별 계산은". (m) get "이 모든 열에 설정된 j에서 찾을 수 있습니다 .SDcols 또는 단일 j = eval (매크로)를 사용하십시오. 효율성을 위해 중요합니다. " 이 경우,'e = substitute (sum (mnem), list (mnem = as.symbol ("col1"))); dt [, eval (e)]'. Fyi, FAQ 1.6은 eval에 관해 더 많은 것을 가지고있다 https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-faq.html – Frank

+0

@ user2957945 그래, 통상적 인 관례는'lapply (.SD, sum)'이지만, 'sum (.SD) '대신에. – Frank

답변

0

밥상은 정답이, 또는 당신이 할 수 말했다 :

dt[, sum(eval(parse(text = mnem)))] 
관련 문제