Durante la costruzione di espressioni da inserire nello j
-slot di una chiamata [.data.table
, sarebbe spesso utile poter esaminare e giocare con il contenuto di .SD
.Can .SD può essere visualizzato da un browser all'interno di [.data.table()?
Questo tentativo ingenuo non funziona ...
library(data.table)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
DT[, browser(), by=x]
# Called from: `[.data.table`(DT, , browser(), by = x)
Browse[1]>
Browse[1]> .SD
# NULL data.table
... anche se una variabile denominata .SD
e molti altri legati alla corrente sottoinsieme data.table sono tutti presenti nell'ambiente locale
Browse[1]> ls(all.names = TRUE)
# [1] ".BY" ".GRP" ".I" ".iSD" ".N" ".SD"
# [7] "Cfastmean" "mean" "print" "x"
Browse[1]> .N
# [1] 3
Browse[1]> .I
# [1] 4 5 6
Utilizzando .I
, posso osservare qualcosa di simile +/- .SD
, ma sarebbe bello essere in grado di accedere direttamente il suo valore:
Browse[1]> DT[.I]
# x y v
# 1: b 1 4
# 2: b 3 5
# 3: b 6 6
Le mie domande: Perché il valore atteso di .SD
non direttamente disponibili all'interno di una chiamata browser()
(mentre .I
, .N
, .GRP
e .BY
sono)? C'è un modo alternativo per accedere al valore di .SD
?
ho vinto der, al momento viene chiamato 'browser()', '.SD' è effettivamente popolato con qualcosa? 'str (.SD)' mostra 'Classes 'data.table' e 'data.frame': \t 0 obs. di 0 variabili' ecc –
@ GavinSimpson - Penso che probabilmente stai facendo qualcosa lì. La risposta parziale che ho appena aggiunto sembra un'ulteriore prova in quella direzione. Mi chiedo anche se la valutazione ritardata di '.SD' sia in qualche modo coinvolta. –