2014-07-14 8 views
49

में विरासत में शामिल होने के साथ विरासत में शामिल हों। मैं डेटा.table 1.9.3 पर हूं, और शायद मैं गलत हूं, लेकिन मुझे को पहले उम्मीद की जाने वाली याद नहीं है।डेटा.table

2 data.tables, डीटीए का निर्माण और DTB

> dta 
    idx vala fdx 
1: 1 2 a 
2: 2 4 a 
3: 3 6 b 

> dtb 
    idx valb 
1: 1 3 
2: 4 6 

> dput(x = dta) 
structure(list(idx = c(1, 2, 3), vala = c(2, 4, 6), fdx = c("a", 
"a", "b")), .Names = c("idx", "vala", "fdx"), row.names = c(NA, 
-3L), class = c("data.table", "data.frame"), .internal.selfref = 
<pointer: 0x0000000000110788>, sorted = "idx") 

> dput(x = dtb) 
structure(list(idx = c(1, 4), valb = c(3, 6)), .Names = c("idx", 
"valb"), row.names = c(NA, -2L), class = c("data.table", "data.frame" 
), .internal.selfref = <pointer: 0x0000000000110788>, sorted = "idx") 

कुंजी दोनों ही मामलों में IDX है।

निम्नलिखित काम करता है, निश्चित रूप से

> dta[dtb, sum(valb)] 
[1] 9 

हालांकि इस

> dta[dtb, sum(valb), by = fdx] 
Error in `[.data.table`(dta, dtb, sum(valb), by = fdx) : 
    object 'valb' not found 

नहीं है लेकिन इस

> dta[dtb][, sum(valb), by = fdx] 
    fdx V1 
1: a 3 
2: NA 6 

करता है हम मध्यवर्ती चरण

> dta[dtb] 
    idx vala fdx valb 
1: 1 2 a 3 
2: 4 NA NA 6 
देखते हैं, तो

मैं

dta[dtb, sum(valb), by = fdx] == dta[dtb][, sum(valb), by = fdx] 

कहाँ मैं गलत हो गया है की उम्मीद होती?

+6

इस मुद्दे को [FR # 733] (https://github.com/Rdatatable/data.table/issues/733) के रूप में दायर किया। एक संबंधित [एफआर # 732] (https://github.com/Rdatatable/data.table/issues/732) भी दायर किया। धन्यवाद। – Arun

+0

मैं डेटाटेबल 1.9.4 में भी इस व्यवहार (= बग?) को पुन: उत्पन्न कर सकता हूं, क्या कोई खबर है? –

उत्तर

1

बस एक अनुमान

library(data.table) 

dta <- data.frame(idx=c(1,2,3), 
        vala=c(2,4,6), 
        fdx=c('a','a','b')) 
dta <- data.table(dta) 

dtb <- data.frame(idx=c(1,4), 
        valb=c(3,6)) 
dtb <- data.table(dtb) 

setkey(dta,idx) 
setkey(dtb,idx) 

तो जब आप

dta[dtb, sum(valb)] 

फोन यह एक तरह है की

tmp <- dta[dtb] 
attach(tmp) 
sum(valb) 
detach(tmp) 

बुला हालांकि तरह, अगर आप

dta[dtb, sum(valb), by=fdx] 
फोन 10

तो यह एक तरह से

tmp <- dta[dtb] 
# attach(tmp) : attach doesn't happen 
sum(valb) 
# detach(tmp) : detach doesn't happen 

समारोह बुला क्या अतिरिक्त तर्क के साथ क्या करने के लिए पता नहीं है की तरह है। उदाहरण के लिए, यह भी एक त्रुटि फेंक होगा:

dta[dtb, class(fdx), sum(valb)] 

बहरहाल, यह काम करता है

dta[dtb][, sum(valb), by=fdx] 

जो एक तरह से

tmp <- dta[dtb] 
tmp[, sum(valb), by=fdx] 

जैसा कि मैंने कहा था की तरह है, यह के रूप में सिर्फ एक अनुमान है क्यों कार्य अपेक्षा के अनुसार काम नहीं कर रहा है।

संबंधित मुद्दे