प्रोग्राम को वेरिएबल सेलेक्ट करने के दो तरीके :
with = FALSE
:
DT = data.table(col1 = 1:3)
colname = "col1"
DT[, colname, with = FALSE]
'डॉट डॉट' ( ..
) उपसर्ग:
DT[, ..colname]
'डॉट डॉट' ( ..
) अंकन के आगे के विवरण के लिए , 1.10.2 में नई विशेषताएँ देखें (यह वर्तमान में सहायता पाठ में वर्णित नहीं है)।
चर (ओं) को असाइन करने के लिए, :=
कोष्ठक में LHS लपेटें :
DT[, (colname) := 4:6]
उत्तरार्द्ध को कॉलम प्लैंक के रूप में जाना जाता है , क्योंकि आप संदर्भ द्वारा पूरे कॉलम वेक्टर को बदलते हैं। यदि एक उपसमुच्चय i
मौजूद था, तो यह संदर्भ द्वारा उप-समूह होगा। चारों ओर (colname)
परेंस CRAN 2014 के संस्करण v1.9.4 में पेश किया गया एक शॉर्टहैंड है। यहाँ समाचार आइटम है :
के with = FALSE
साथ उपयोग करना :=
अब सभी मामलों में पदावनत कर दिया गया है, यह देखते हुए कि :=
कोष्ठक के साथ एलएचएस को लपेटना कुछ समय के लिए पसंद किया गया है।
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]
या, आप इसे आसान को पढ़ने के लिए मिल सकती है, लिखने और बस को डिबग 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