দ্বারা 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<-
সব জায়গায় পরিবর্তন করুন।