Trong khi xây dựng các biểu thức để đặt trong số j
-loại cuộc gọi [.data.table
, sẽ rất hữu ích khi có thể kiểm tra và phát xung quanh với nội dung của .SD
.Có thể .SD được xem từ trình duyệt trong [.data.table() không?
nỗ lực ngây thơ này không hoạt động ...
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
... mặc dù một biến có tên .SD
và một số người khác liên quan đến việc tập hợp con data.table hiện tại đều hiện diện trong môi trường địa phương
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
Sử dụng .I
, tôi có thể xem một cái gì đó giống như +/- .SD
, nhưng nó sẽ được tốt đẹp để có thể truy cập trực tiếp giá trị của nó:
Browse[1]> DT[.I]
# x y v
# 1: b 1 4
# 2: b 3 5
# 3: b 6 6
Câu hỏi của tôi: Tại sao giá trị kỳ vọng của .SD
không trực tiếp có sẵn từ bên trong một cuộc gọi browser()
(trong khi .I
, .N
, .GRP
và .BY
là)? Có cách nào khác để truy cập vào giá trị của .SD
không?
Tôi đã thắng der, tại thời điểm 'browser()' được gọi, là '.SD' thực sự có chứa bất cứ thứ gì? 'str (.SD)' hiển thị 'Lớp dữ liệu 'data.table' và 'data.frame': \t 0 obs. của 0 biến' v.v. –
@GavinSimpson - Tôi nghĩ bạn có thể đang ở trên một thứ gì đó ở đó. Câu trả lời một phần tôi vừa thêm vào có vẻ như bằng chứng bổ sung theo hướng đó. Tôi cũng tự hỏi nếu đánh giá chậm trễ của '.SD' là bằng cách nào đó có liên quan. –