Podczas konstruowania wyrażeń służących do wywoływania j
-slotę połączenia [.data.table
, często byłoby pomocne, aby móc badać i odtwarzać z zawartością .SD
.Można .SD być wyświetlane z przeglądarki w [.data.table()?
Ta naiwna próba nie działa ...
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
... choć zmienna o nazwie .SD
i kilka innych związanych z bieżącym data.table podzbioru są obecne w środowisku lokalnym
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
Korzystanie .I
, mogę zobaczyć coś +/- jak .SD
, ale byłoby miło, aby móc bezpośredni dostęp do jego wartości:
Browse[1]> DT[.I]
# x y v
# 1: b 1 4
# 2: b 3 5
# 3: b 6 6
Moje pytania: Dlaczego jest wartość oczekiwana .SD
nie są bezpośrednio dostępne z poziomu browser()
rozmowy (podczas .I
, .N
, .GRP
i .BY
są)? Czy jest jakiś alternatywny sposób uzyskania dostępu do wartości .SD
?
Wygrałem der, w czasie wywoływanym 'browser()', czy '.SD' jest wypełnione czymkolwiek? 'str (.SD)' pokazuje 'Klasy 'data.table' i 'data.frame': \t 0 obs. 0 zmiennych "itp. –
@GavinSimpson - Myślę, że prawdopodobnie coś tam znajdziesz. Częściowa odpowiedź, którą właśnie dodałem, wydaje się dodatkowym dowodem w tym kierunku. Zastanawiam się również, czy opóźniona ocena '.SD' jest w jakiś sposób zaangażowana. –