프로그래밍 방식으로 변수를 선택하는 두 가지 방법 :
with = FALSE
:
DT = data.table(col1 = 1:3)
colname = "col1"
DT[, colname, with = FALSE]
'점점'( ..
) 접두사 :
DT[, ..colname]
'점점'( ..
) 표기법에 대한 자세한 설명은 1.10.2의 새로운 기능 (현재 도움말 텍스트에 설명되어 있지 않음)을 참조하십시오.
변수에 할당 하려면 LHS를 :=
괄호로 묶습니다.
DT[, (colname) := 4:6]
후자는 전체 열 벡터를 참조로 대체하기 때문에 열 plonk 라고합니다. 하위 집합 i
이 있으면 참조로 하위 할당됩니다. 괄호 (colname)
는 2014 년 10 월 CRAN 버전 v1.9.4에 도입 된 속기입니다. 다음은 뉴스 항목입니다 .
with = FALSE
with :=
의 LHS :=
를 괄호로 감싸는 것이 한동안 선호되었으므로 with 사용 은 이제 모든 경우에 사용되지 않습니다 .
colVar = "col1"
DT[, colVar := 1, with = FALSE]
DT[, (colVar) := 1]
DT[, c("col1", "col2") := 1]
DT[, 2:4 := 1]
DT[, c("col1","col2") := list(sum(a), mean(b)]
DT[, `:=`(...), by = ...]
의 세부 정보 섹션을 참조하십시오 ?`:=`
.
DT[i, (colnamevector) := value]
그리고 코멘트에서 추가 질문에 답하기 위해 한 가지 방법이 있습니다 (평소와 같이 여러 가지 방법이 있습니다) :
DT[, colname := cumsum(get(colname)), with = FALSE]
또는, 당신은 쉽게 읽을 단지에 대한 쓰기 및 디버그 찾을 수 서버에 전송하는 동적 SQL 문을 생성 유사를 :eval
paste
expr = paste0("DT[,",colname,":=cumsum(",colname,")]")
expr
eval(parse(text=expr))
그렇게 많이하면 도우미 함수를 정의 할 수 있습니다 EVAL
.
EVAL = function(...)eval(parse(text=paste0(...)),envir=parent.frame(2))
EVAL("DT[,",colname,":=cumsum(",colname,")]")
이제 data.table
1.8.2가 자동으로 j
효율성을 최적화하므로이 eval
방법 을 사용하는 것이 좋습니다 . get()
에는 j
예를 들어, 어떤 최적화를 방지 할 수 있습니다.
또는 set()
. 오버 헤드가 적고 기능적인 형식 인 :=
. 여기에서는 괜찮습니다. 을 참조하십시오 ?set
.
set(DT, j = colname, value = cumsum(DT[[colname]]))
DT