निम्नलिखित बेंचमार्क (Windows मशीन पर आर 3.4.1) पर विचार करें:समय अंतर वस्तुओं
library(rbenchmark)
mtx <- matrix(runif(1e8), ncol = 100)
df <- as.data.frame(mtx)
colnames(mtx) <- colnames(df) <- paste0("V", 1:100)
benchmark(
mtx[5000:7000, 80],
mtx[5000:7000, "V80"],
mtx[, "V80"][5000:7000],
mtx[, "V80", drop = FALSE][5000:7000, ],
mtx[5000:7000, , drop = FALSE][, "V80"],
#mtx$V80[5000:7000], # does not apply
replications = 5000
)
## test replications elapsed relative user.self sys.self user.child sys.child
## 4 mtx[, "V80", drop = FALSE][5000:7000, ] 5000 64.71 588.273 47.44 16.61 NA NA
## 3 mtx[, "V80"][5000:7000] 5000 72.15 655.909 52.90 18.18 NA NA
## 2 mtx[5000:7000, "V80"] 5000 0.11 1.000 0.11 0.00 NA NA
## 5 mtx[5000:7000, , drop = FALSE][, "V80"] 5000 7.47 67.909 5.89 1.47 NA NA
## 1 mtx[5000:7000, 80] 5000 0.13 1.182 0.12 0.00 NA NA
benchmark(
df[5000:7000, 80],
df[5000:7000, "V80"],
df[, "V80"][5000:7000],
df[, "V80", drop = FALSE][5000:7000, ],
df[5000:7000, , drop = FALSE][, "V80"],
df$V80[5000:7000],
replications = 5000
)
## test replications elapsed relative user.self sys.self user.child sys.child
## 6 df$V80[5000:7000] 5000 0.13 1.000 0.12 0.00 NA NA
## 4 df[, "V80", drop = FALSE][5000:7000, ] 5000 0.33 2.538 0.33 0.00 NA NA
## 3 df[, "V80"][5000:7000] 5000 0.17 1.308 0.17 0.00 NA NA
## 2 df[5000:7000, "V80"] 5000 0.15 1.154 0.16 0.00 NA NA
## 5 df[5000:7000, , drop = FALSE][, "V80"] 5000 13.63 104.846 12.91 0.39 NA NA
## 1 df[5000:7000, 80] 5000 0.19 1.462 0.17 0.00 NA NA
समय अंतर बहुत नाटकीय है। ऐसा क्यों है? सबसेटिंग का अनुशंसित तरीका क्या है और क्यों? बेंचमार्क को देखते हुए, mtx[i, colname]
मैट्रिक्स और df$colname[i]
के लिए रास्ता (लेकिन यह बहुत अंतर नहीं लग रहा है) डेटा.फ्रेम के लिए सबसे अधिक समय-कुशल लगता है, लेकिन क्या कोई सामान्य कारण हैं कि हमें किसी भी दृष्टिकोण को क्यों पसंद करना चाहिए?
डेटा.फ्रेम के लिए $ --extraction हमेशा अनुशंसित नहीं है। यह केवल इंटरैक्टिव उपयोग के लिए है। आप 'डीएफ [["वी 80"]] 'और' डीएफ [[80]]' निष्कर्षण विधियों को जोड़ सकते हैं। –
बस अपने विशेष मैट्रिक्स/डेटा.फ्रेम के लिए सबसे तेज़ उपयोग करें (मान लें कि उप सेटिंग की गति आपके कोड का अवरुद्ध हिस्सा भी है)। यह आमतौर पर दो '[] [] 'के बजाय एक सबसेटिंग ऑपरेशन' [] 'करना बेहतर होता है। आपके पास अलग-अलग विकल्प हैं ताकि आप चुन सकें कि कौन सा अधिक पठनीय है या आपके कोड को समझने में आसान बनाता है। – MrFlick