Dua cara untuk memilih variabel secara terprogram :
with = FALSE:
DT = data.table(col1 = 1:3)
colname = "col1"
DT[, colname, with = FALSE]
'dot dot' ( ..) awalan:
DT[, ..colname]
Untuk penjelasan lebih lanjut tentang ..notasi 'titik titik' ( ), lihat Fitur Baru di 1.10.2 (saat ini tidak dijelaskan dalam teks bantuan).
Untuk menetapkan ke variabel, bungkus LHS :=di dalam tanda kurung:
DT[, (colname) := 4:6]
Yang terakhir ini dikenal sebagai kolom plonk , karena Anda mengganti vektor seluruh kolom dengan referensi. Jika ada subset, subset iakan dibuat berdasarkan referensi. Parens sekitar (colname)adalah singkatan yang diperkenalkan dalam versi v1.9.4 pada CRAN Oktober 2014. Berikut adalah item beritanya :
Penggunaan with = FALSEwith :=sekarang sudah tidak digunakan lagi dalam semua kasus, mengingat bahwa membungkus kiri :=dengan tanda kurung lebih disukai untuk beberapa waktu.
colVar = "col1"
DT[, (colVar) := 1]
DT[, c("col1", "col2") := 1]
DT[, 2:4 := 1]
DT[, c("col1","col2") := list(sum(a), mean(b))]
DT[, `:=`(...), by = ...]
Lihat juga bagian Detail di ?`:=`:
DT[i, (colnamevector) := value]
Dan untuk menjawab pertanyaan selanjutnya dalam komentar, berikut salah satu caranya (seperti biasa ada banyak cara):
DT[, colname := cumsum(get(colname)), with = FALSE]
atau, Anda mungkin menemukan lebih mudah untuk membaca, menulis dan debug hanya untuk evalsebuah paste, mirip dengan membangun sebuah pernyataan SQL dinamis untuk mengirim ke server:
expr = paste0("DT[,",colname,":=cumsum(",colname,")]")
expr
eval(parse(text=expr))
Jika Anda sering melakukannya, Anda dapat menentukan fungsi helper EVAL:
EVAL = function(...)eval(parse(text=paste0(...)),envir=parent.frame(2))
EVAL("DT[,",colname,":=cumsum(",colname,")]")
Sekarang data.table1.8.2 secara otomatis mengoptimalkan jefisiensi, mungkin lebih baik untuk menggunakan evalmetode ini. The get()dalam jmencegah beberapa optimasi, misalnya.
Atau, ada set(). Overhead rendah, bentuk fungsional :=, yang akan baik-baik saja di sini. Lihat ?set.
set(DT, j = colname, value = cumsum(DT[[colname]]))
DT