Bei der Konstruktion von Ausdrücken, die in den j
-Slot eines [.data.table
Aufrufs eingefügt werden, wäre es oft hilfreich, in der Lage zu sein, den Inhalt von .SD
zu untersuchen und mit ihm herumzuspielen.Kann .SD von einem Browser in [.data.table() angezeigt werden?
Dieser naive Versuch nicht funktioniert ...
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
... obwohl eine Variable .SD
und einige andere im Zusammenhang mit der aktuellen data.table Teilmenge genannt sind alle in der lokalen Umgebung
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
.I
benutzen, kann ich etwas +/- wie .SD
sehen, aber es wäre schön, der Lage sein, den direkten Zugriff auf seinen Wert:
Browse[1]> DT[.I]
# x y v
# 1: b 1 4
# 2: b 3 5
# 3: b 6 6
Meine Fragen: Warum ist der Erwartungswert von .SD
nicht direkt zur Verfügung innerhalb eines browser()
Anrufs (während .I
, .N
, .GRP
und .BY
sind)? Gibt es eine alternative Möglichkeit, auf den Wert .SD
zuzugreifen?
ich gewonnen der, zu der Zeit 'browser()' genannt wird, ist '.SD' eigentlich mit irgendwas bevölkert? 'str (.SD)' zeigt 'Classes 'data.table' und 'dat.frame': \t 0 obs. von 0 Variablen usw. –
@GavinSimpson - Ich denke, Sie sind wahrscheinlich auf etwas da. Die teilweise Antwort, die ich gerade hinzugefügt habe, scheint wie ein zusätzlicher Beweis in diese Richtung zu sein. Ich frage mich auch, ob eine verzögerte Auswertung von '.SD' irgendwie beteiligt ist. –