मैंने देखा है कि cbind डेटा.tables के लिए rbind से काफी लंबा समय लेता है। इसका कारण क्या है?cbind बनाम rbind data.table
> dt <- as.data.table(mtcars)
> new.dt <- copy(dt)
> timeit({for (i in 1:100) dt.new <- rbind(dt.new, dt)})
user system elapsed
0.237 0.012 0.253
> new.dt <- copy(dt)
> timeit({for (i in 1:100) dt.new <- cbind(dt.new, dt)})
user system elapsed
14.795 0.090 14.912
कहाँ
timeit <- function(expr)
{
ptm <- proc.time()
expr
proc.time() - ptm
}
मैं data.table के आंतरिक पता नहीं है, लेकिन मैं नए रिकॉर्ड (पंक्तियाँ) जोड़ने लगता है कि आसान है:
आप नीचे देख सकते हैं,
cbind
के लिए बुनियादी संचालन ज्यादाrbind
तुलना में तेजी से कर रहे हैं नए चर (कॉलम) के साथ तालिका पुनर्गठन की तुलना में। – zx8754@ zx8754 हां मैं भी अपने संदेह से सहमत हूं, उत्सुक है कि विशिष्ट बोतल गर्दन क्या है। हो सकता है कि यह स्मृति आवंटन हो, शायद अधिक मेमोरी आवश्यकताएं, उम्मीद है कि पैकेज की नीची किरदार के साथ कोई familar प्रकाश डाल सकता है .. – andrew
जब तक मैं गलत नहीं हूं, 'data.table' पर 'rbind' को कॉल करना' rbind.data प्रेषित करेगा। तालिका', जो 'data.table' फ़ंक्शन 'rbindlist'- को सी में लागू किया गया है, और बहुत तेज़ है। @ अरुण का जवाब देखें [यहां] (http://stackoverflow.com/questions/15673550/why-is-rbindlist-better-than-rbind)। इसके शीर्ष पर, कॉलम-वार संशोधनों और पंक्ति-वार संशोधनों (स्मृति में वस्तुओं को कैसे संग्रहीत किया जाता है) के बीच लगभग निश्चित रूप से मौलिक अंतर होते हैं, इसलिए यह वास्तव में "सेब-टू-सेब" तुलना नहीं है। सबसे अधिक संभावना है कि 'data.table' कॉलम को कुशलतापूर्वक संशोधित करने के लिए': = 'लागू करता है। – nrussell