দ্বারা v1.9.2, rbindlistবেশ খানিকটা বিকশিত হয়েছিল, যার মধ্যে রয়েছে অনেকগুলি বৈশিষ্ট্য:
SEXPTYPEবাঁধাইয়ের সময় সর্বাধিক কলামগুলি নির্বাচন করা - এফআর # 2456 এবং বাগ # 4981v1.9.2 বন্ধ করে কার্যকর করা হয়েছে ।
- পরিচালনা
factorকলাম সঠিকভাবে - প্রথম বাস্তবায়িত v1.8.10বন্ধ বাগ # 2650 বাঁধাই এবং বর্ধিত আদেশ সাবধানে মধ্যে কারণের v1.9.2পাশাপাশি, ক্লোজিং এফ আর # 4856 এবং বাগ # 5019 ।
তদ্ব্যতীত, ইন v1.9.2, rbind.data.tableএকটি fillযুক্তিও অর্জন করেছিল , যা আর এ প্রয়োগ করে নিখোঁজ কলামগুলি পূরণ করে বাঁধাই করতে দেয়।
এখন v1.9.3, এই বিদ্যমান বৈশিষ্ট্যগুলিতে আরও আরও উন্নতি রয়েছে:
rbindlistএকটি যুক্তি অর্জন করে use.names, যা পূর্বনির্ধারিতভাবে FALSEপিছনের সামঞ্জস্যের জন্য।
rbindlistএছাড়াও একটি যুক্তি অর্জন করে fill, যা পূর্বনির্ধারিতভাবে FALSEপিছনের সামঞ্জস্যের জন্যও ।
- এই বৈশিষ্ট্যগুলি সমস্ত সিতে প্রয়োগ করা হয়েছে এবং কার্যকরীতা যুক্ত করার সময় গতিতে কোনও আপস না করার জন্য সাবধানতার সাথে লিখিত হয়েছে।
- যেহেতু
rbindlistএখন নামের সাথে মেলে এবং অনুপস্থিত কলামগুলি পূরণ করতে পারে, rbind.data.tableকেবল rbindlistএখনই কল । পার্থক্যটি সামঞ্জস্যতার use.names=TRUEজন্য কেবলমাত্র ডিফল্টরূপে rbind.data.table।
rbind.data.frameবেশিরভাগ কপি করে (যা @ মণিও উল্লেখ করে) যেগুলি এড়ানো যেতে পারে (সি তে চলে যাওয়ার কারণে) বেশ খানিকটা ধীর হয়ে যায়। আমি মনে করি এটিই একমাত্র কারণ নয়। কলামের নাম চেক করার / ম্যাচ করার জন্য বাস্তবায়নটি rbind.data.frameযখন ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে তাশূন্য করতে পারে যখন ডাটা.ফ্রেমে প্রতি কলাম অনেক বেশি থাকে এবং সেখানে এমন অনেকগুলি ডেটা ফ্রেম থাকে যা বাঁধতে হয় (নীচে বেঞ্চমার্কে দেখানো হয়েছে)।
তবে, rbindlistঅভাব (সম্পাদনা) নির্দিষ্ট বৈশিষ্ট্যগুলি (যেমন ফ্যাক্টর স্তরগুলি পরীক্ষা করা বা নামগুলির সাথে মিল রাখা) এটির তুলনায় খুব দ্রুত ওজনের সাথে খুব ক্ষুদ্র (বা কোনও) ওজন বহন করে না rbind.data.frame। কারণ সেগুলি সিটিতে সাবধানতার সাথে প্রয়োগ করা হয়েছিল, গতি এবং মেমরির জন্য অনুকূলিত।
এখানে একটি মানদণ্ড যা কলামের নামের সাথে মিলের পাশাপাশি rbindlistএর use.namesবৈশিষ্ট্যটি ব্যবহার করে দক্ষ বাঁধনকে হাইলাইট করে v1.9.3। ডেটা সেটটিতে 10000 ডেটা থাকে। আকার 10 * 500 এর প্রতিটি ফ্রেম করে।
বিশেষ দ্রষ্টব্য: এই বেঞ্চমার্ক করার জন্য একটি তুলনা অন্তর্ভুক্ত আপডেট করা হয়েছে dplyrএরbind_rows
library(data.table) # 1.11.5, 2018-06-02 00:09:06 UTC
library(dplyr) # 0.7.5.9000, 2018-06-12 01:41:40 UTC
set.seed(1L)
names = paste0("V", 1:500)
cols = 500L
foo <- function() {
data = as.data.frame(setDT(lapply(1:cols, function(x) sample(10))))
setnames(data, sample(names))
}
n = 10e3L
ll = vector("list", n)
for (i in 1:n) {
.Call("Csetlistelt", ll, i, foo())
}
system.time(ans1 <- rbindlist(ll))
# user system elapsed
# 1.226 0.070 1.296
system.time(ans2 <- rbindlist(ll, use.names=TRUE))
# user system elapsed
# 2.635 0.129 2.772
system.time(ans3 <- do.call("rbind", ll))
# user system elapsed
# 36.932 1.628 38.594
system.time(ans4 <- bind_rows(ll))
# user system elapsed
# 48.754 0.384 49.224
identical(ans2, setDT(ans3))
# [1] TRUE
identical(ans2, setDT(ans4))
# [1] TRUE
নামগুলির জন্য পরীক্ষা না করে যেমন কলামগুলি বাঁধাই হয়েছে ঠিক ১.৩ নিয়েছে যেখানে কলামের নামগুলি পরীক্ষা করা এবং বাঁধাই করার জন্য যথাযথভাবে মাত্র 1.5 সেকেন্ড সময় নিয়েছে। বেস সলিউশনের তুলনায়, এটি 14x দ্রুত এবং dplyrসংস্করণটির তুলনায় 18x দ্রুত ।
attr<-,class<-এবং (আমি মনে করি)rownames<-সব জায়গায় পরিবর্তন করুন।