ডেটা.ট্যাবেলে dplyr, আমি কি সত্যিই ডেটা টেবিল ব্যবহার করছি?


91

আমি যদি কোনও ডেটেবলের শীর্ষে dplyr সিনট্যাক্স ব্যবহার করি, তবে dplyr এর সিনট্যাক্সটি ব্যবহার করার সময় আমি কী ডেটাটেবলের সমস্ত গতির সুবিধা পেতে পারি? অন্য কথায়, আমি যদি dplyr সিনট্যাক্স দিয়ে কোয়েরি করি তবে ডেটাটেবলকে আমি ভুল ব্যবহার করব? বা এর সমস্ত শক্তিকে কাজে লাগানোর জন্য আমাকে খাঁটি ডেটাটেবল সিনট্যাক্স ব্যবহার করতে হবে?

কোনো পরামর্শের জন্য আগাম ধন্যবাদ। কোড উদাহরণ:

library(data.table)
library(dplyr)

diamondsDT <- data.table(ggplot2::diamonds)
setkey(diamondsDT, cut) 

diamondsDT %>%
    filter(cut != "Fair") %>%
    group_by(cut) %>%
    summarize(AvgPrice = mean(price),
                 MedianPrice = as.numeric(median(price)),
                 Count = n()) %>%
    arrange(desc(Count))

ফলাফল:

#         cut AvgPrice MedianPrice Count
# 1     Ideal 3457.542      1810.0 21551
# 2   Premium 4584.258      3185.0 13791
# 3 Very Good 3981.760      2648.0 12082
# 4      Good 3928.864      3050.5  4906

এখানে আমি ডেটেবল সমতুল্যতা নিয়ে এসেছি। এটি ডিটি ভাল অনুশীলনের সাথে সম্মতি দেয় কিনা তা নিশ্চিত নয়। তবে আমি আশ্চর্য হই যে কোডটি ঘটনাস্থলের পিছনে ডিপিপ্লায়ার সিনট্যাক্সের চেয়ে সত্যই কার্যকর:

diamondsDT [cut != "Fair"
        ] [, .(AvgPrice = mean(price),
                 MedianPrice = as.numeric(median(price)),
                 Count = .N), by=cut
        ] [ order(-Count) ]

7
আপনি ডেটা টেবিল সিনট্যাক্স ব্যবহার করবেন না কেন? এটি মার্জিত এবং দক্ষ পাশাপাশি। এটি খুব বিস্তৃত হওয়ায় প্রশ্নটি আসলেই উত্তরযোগ্য নয়। হ্যাঁ, dplyrডেটা টেবিলগুলির জন্য পদ্ধতি রয়েছে তবে ডেটা টেবিলের নিজস্ব তুলনামূলক পদ্ধতিও রয়েছে
রিচ স্ক্রিভেন

7
আমি ডেটাটেবল সিনট্যাক্স বা কোর্স ব্যবহার করতে পারি। তবে কোনওভাবে, আমি dplyr সিনট্যাক্স আরও মার্জিত দেখতে। সিনট্যাক্সের জন্য আমার পছন্দ নির্বিশেষে। আমি যা জানতে চাই তা হ'ল: ডেটেবল পাওয়ারের 100% সুবিধা পাওয়ার জন্য আমাকে কি খাঁটি ডেটাটেবল সিনট্যাক্স ব্যবহার করতে হবে?
পলিমারেজ

4
একটি সাম্প্রতিক বেঞ্চমার্ক যেখানে জন্য dplyrব্যবহার করা হয় data.frames এবং সংশ্লিষ্ট data.tableগুলি দেখতে এখানে (এবং রেফারেন্স তাতে)।
হেনরিক

4
@ পোলিমেরেজ - আমি মনে করব যে এই প্রশ্নের উত্তর অবশ্যই "হ্যাঁ"
সমৃদ্ধ স্ক্রিভেন

4
@ হেনরিক: আমি পরে বুঝতে পেরেছিলাম যে আমি সেই পৃষ্ঠাটি ভুল ব্যাখ্যা করেছি কারণ তারা কেবল ডেটাফ্রেম নির্মাণের জন্য কোড প্রদর্শন করেছে তবে তারা ডেটা.ট্যাবল নির্মাণের জন্য যে কোড ব্যবহার করেছিল তা নয়। যখন আমি এটি উপলব্ধি করলাম তখন আমি আমার মন্তব্য মুছে ফেললাম (আশা করি আপনি এটি দেখেন নি)।
আইআরটিএফএম

উত্তর:


77

কোনও সরল / সরল উত্তর নেই কারণ এই দুটি প্যাকেজের দর্শনগুলি নির্দিষ্ট দিক থেকে পৃথক। সুতরাং কিছু আপস অপরিহার্য। এখানে আপনার উদ্বেগের সমাধান করতে হবে / বিবেচনা করতে হবে।

জড়িত অপারেশনগুলি i(== filter()এবং slice()dplyr এ)

ধরে নিন DT10 কলাম বলে। এই ডেটা.ট্যাবল এক্সপ্রেশন বিবেচনা করুন:

DT[a > 1, .N]                    ## --- (1)
DT[a > 1, mean(b), by=.(c, d)]   ## --- (2)

(1) DTকলামে সারিগুলির সংখ্যা দেয় a > 1। (২) একই অভিব্যক্তির জন্য (1) হিসাবে mean(b)গোষ্ঠী অনুসারে c,dপ্রদান করেi

সাধারণত ব্যবহৃত dplyrএক্সপ্রেশন:

DT %>% filter(a > 1) %>% summarise(n())                        ## --- (3) 
DT %>% filter(a > 1) %>% group_by(c, d) %>% summarise(mean(b)) ## --- (4)

স্পষ্টতই, ডাটা.ট্যাবেল কোডগুলি ছোট। এছাড়াও তারা আরও মেমরি দক্ষ 1 । কেন? কারণ (3) এবং (4) উভয় ক্ষেত্রে প্রথমে সমস্ত 10 টি কলামের সারিfilter() ফেরত দেয় , যখন (3) এ আমাদের কেবল সারিগুলির সংখ্যা প্রয়োজন এবং (4) এ আমাদের কেবল ধারাবাহিক ক্রিয়াকলাপের জন্য কলামগুলি প্রয়োজন । এটি কাটিয়ে উঠতে, আমাদের কলামগুলি এপ্রিওরি করতে হবে:b, c, dselect()

DT %>% select(a) %>% filter(a > 1) %>% summarise(n()) ## --- (5)
DT %>% select(a,b,c,d) %>% filter(a > 1) %>% group_by(c,d) %>% summarise(mean(b)) ## --- (6)

দুটি প্যাকেজের মধ্যে একটি প্রধান দার্শনিক পার্থক্য হাইলাইট করা আবশ্যক:

  • ইন data.table, আমরা এই সম্পর্কিত ক্রিয়াকলাপগুলি একসাথে রাখতে চাই এবং এটি j-expression(একই ফাংশন কল থেকে) দেখতে এবং বুঝতে পারে যে (1) এ কোনও কলামের প্রয়োজন নেই। মধ্যে iপ্রকাশটি গুণিত হয়, এবং .Nকেবলমাত্র সেই লজিকাল ভেক্টরের সমষ্টি যা সারিগুলির সংখ্যা দেয়; পুরো উপসেটটি কখনই উপলব্ধি হয় না। (2) এ, কেবল কলামটি b,c,dউপসেটে রূপায়িত হয়েছে, অন্যান্য কলামগুলি উপেক্ষা করা হবে।

  • তবে মধ্যে dplyr, দর্শনের একটি ফাংশন হ'ল একটি কাজ ঠিকভাবে করা উচিত । অপারেশনটির পরে filter()আমাদের ফিল্টারকৃত সমস্ত কলামগুলির প্রয়োজন আছে কিনা তা জানার কোনও উপায় নেই (অন্তত বর্তমানে) । আপনি যদি এই জাতীয় কাজগুলি দক্ষতার সাথে সম্পাদন করতে চান তবে আপনাকে আগে চিন্তা করতে হবে। আমি ব্যক্তিগতভাবে এ ক্ষেত্রে এটিকে পাল্টা স্বজ্ঞাত বলে মনে করি।

নোট করুন যে (5) এবং (6) এ, আমরা এখনও কলামটি সাবসেট aকরি যা আমাদের প্রয়োজন হয় না। তবে কীভাবে তা এড়ানো যায় তা আমি নিশ্চিত নই। filter()ফাংশনে যদি ফিরে আসার জন্য কলামগুলি নির্বাচন করার পক্ষে যুক্তি থাকে, তবে আমরা এই সমস্যাটি এড়াতে পারি, তবে তারপরে ফাংশনটি কেবল একটি কাজ করবে না (এটি একটি dplyr নকশা পছন্দও)।

রেফারেন্স দ্বারা সাব-অ্যাসাইন

dplyr রেফারেন্স দ্বারা কখনও আপডেট হবে না । এটি দুটি প্যাকেজের মধ্যে আরেকটি বিশাল (দার্শনিক) পার্থক্য।

উদাহরণস্বরূপ, ডেটা.টেটেলে আপনি এটি করতে পারেন:

DT[a %in% some_vals, a := NA]

যা শর্তটি সন্তুষ্ট করে কেবল সেই সারিগুলিতে a রেফারেন্স দিয়ে কলাম আপডেট করে । এই মুহুর্তে dplyr গভীর কপি পুরো ডেটা অনুলিপি করে। একটি নতুন কলাম যুক্ত করার জন্য অভ্যন্তরীণভাবে টেবিল করুন। @ ব্রাদিজি ইতিমধ্যে তার উত্তরে এটি উল্লেখ করেছে।

তবে FR # 617 প্রয়োগ করা হলে গভীর অনুলিপিটি অগভীর অনুলিপি দ্বারা প্রতিস্থাপন করা যেতে পারে । এছাড়াও প্রাসঙ্গিক: dplyr: এফআর # 614 । মনে রাখবেন যে এখনও, আপনি যে কলামটি সংশোধন করেছেন তা সর্বদা অনুলিপি করা হবে (অতএব tad ধীর / কম মেমরি দক্ষ)। রেফারেন্স অনুসারে কলামগুলি আপডেট করার কোনও উপায় থাকবে না।

অন্যান্য কার্যকারিতা

  • ডেটা.ট্যাবেলে আপনি যোগদানের সময় একত্রিত করতে পারবেন এবং এটি বোঝার জন্য আরও সোজাসাপ্টা এবং মধ্যবর্তী যোগদানের ফলাফল কখনই বাস্তবায়িত হয় না বলে স্মৃতিশক্তি দক্ষ। উদাহরণ হিসাবে এই পোস্টে দেখুন । আপনি dplyr এর ডেটা.ট্যাবিল / ডেটা.ফ্রেম সিনট্যাক্স ব্যবহার করে (এই মুহুর্তে?) পারবেন না।

  • ডেটা.ট্যাবলের রোলিং বৈশিষ্ট্যটি ডিপ্লায়ারের সিনট্যাক্সেও সমর্থন করে না।

  • আমরা সম্প্রতি ডেটাতে ওভারল্যাপের সাথে যোগদানের ব্যবস্থাকে বাস্তবায়িত করেছি inter টেকসেটের অন্তরাল রেঞ্জগুলিতে যোগদানের জন্য ( এখানে একটি উদাহরণ রয়েছে ) যা foverlaps()এই মুহুর্তে একটি পৃথক ফাংশন , এবং তাই পাইপ অপারেটরগুলির সাথে ব্যবহার করা যেতে পারে (ম্যাজিস্ট্রিট / পাইপআর? - নিজে নিজে চেষ্টা করে দেখিনি)।

    তবে শেষ পর্যন্ত, আমাদের লক্ষ্য এটিতে একীভূত করা [.data.tableযাতে আমরা অন্যান্য বৈশিষ্ট্য যেমন গ্রুপিং, যোগ দেওয়ার সময় একত্রিত করা ইত্যাদি সংগ্রহ করতে পারি which যার উপরে বর্ণিত একই সীমাবদ্ধতা থাকবে।

  • ১.৯.৪ থেকে ডেটা টেবিল নিয়মিত আর সিনট্যাক্সে দ্রুত বাইনারি অনুসন্ধান ভিত্তিক সাবসেটগুলির জন্য গৌণ কীগুলি ব্যবহার করে স্বয়ংক্রিয় সূচক প্রয়োগ করে। উদাহরণস্বরূপ: DT[x == 1]এবং DT[x %in% some_vals]স্বয়ংক্রিয়ভাবে প্রথম রানটিতে একটি সূচক তৈরি করবে, যা পরে একই কলাম থেকে ধারাবাহিক সাবসেটগুলিতে বাইনারি অনুসন্ধান ব্যবহার করে দ্রুত উপসেটে ব্যবহৃত হবে। এই বৈশিষ্ট্যটি বিকাশ অব্যাহত থাকবে। এই বৈশিষ্ট্যটির একটি সংক্ষিপ্ত বিবরণ জন্য এই সূচনা পরীক্ষা করুন ।

    পথে filter()data.tables জন্য প্রয়োগ করা হয়, এটা সুবিধা এই বৈশিষ্ট্যটির নেয় না।

  • একটি dplyr বৈশিষ্ট্য হ'ল এটি একই সিনট্যাক্স ব্যবহার করে ডেটাবেসগুলিতে ইন্টারফেসও সরবরাহ করে, যা ডেটা.টিটেবল এই মুহুর্তে করে না।

সুতরাং, আপনাকে এগুলি (এবং সম্ভবত অন্যান্য পয়েন্টগুলি) মাপতে হবে এবং এই ট্রেড-অফগুলি আপনার কাছে গ্রহণযোগ্য কিনা তার ভিত্তিতে সিদ্ধান্ত নিতে হবে।

এইচটিএইচ


(1) নোট করুন যে স্মৃতিশক্তি দক্ষ হওয়ার কারণে সরাসরি গতিতে প্রভাব পড়ে (বিশেষত ডেটা আরও বড় হওয়ার সাথে সাথে), কারণ বেশিরভাগ ক্ষেত্রে বাধাটি মূল মেমরি থেকে ডেটা ক্যাশে স্থানান্তরিত করে (এবং যতটা সম্ভব ক্যাশে ডেটা ব্যবহার করা যায় - ক্যাশে মিস করা কমিয়ে দেয়) - যাতে মূল স্মৃতি অ্যাক্সেস হ্রাস করতে পারে)। এখানে বিশদে যাচ্ছি না।


4
একদম অসাধারণ. এর জন্য ধন্যবাদ
ডেভিড আরেনবুর্গ

6
এটি একটি ভাল উত্তর, তবে dplyr এসকিউএল-র জন্য একই পদ্ধতির ব্যবহার করে দক্ষ প্লাস প্রয়োগ করা সম্ভব (যদি না হয় তবে) সম্ভব হবে - অর্থাত্ একটি অভিব্যক্তি তৈরি করা এবং কেবলমাত্র চাহিদা অনুযায়ী একবার কার্যকর করা। অদূর ভবিষ্যতে এটি কার্যকর করা অসম্ভব কারণ dplyr আমার পক্ষে দ্রুত যথেষ্ট এবং একটি ক্যোয়ারির পরিকল্পনাকারী / অপটিমাইজার বাস্তবায়ন তুলনামূলকভাবে শক্ত hard filter()summarise()
হ্যাডলি

স্মৃতিশক্তি দক্ষ হওয়া অন্য একটি গুরুত্বপূর্ণ ক্ষেত্রেও সহায়তা করে - মেমরির বাইরে চলে যাওয়ার আগে কার্যটি শেষ করে। বড় ডেটাসেটের সাথে কাজ করার সময় আমি dplyr পাশাপাশি পান্ডার সাথে এই সমস্যার মুখোমুখি হয়েছি, যেখানে ডেটা.ট্যাবলটি নিখরচায়ভাবে কাজটি শেষ করবে।
জাকি

25

এটা চেষ্টা করুন.

library(rbenchmark)
library(dplyr)
library(data.table)

benchmark(
dplyr = diamondsDT %>%
    filter(cut != "Fair") %>%
    group_by(cut) %>%
    summarize(AvgPrice = mean(price),
                 MedianPrice = as.numeric(median(price)),
                 Count = n()) %>%
    arrange(desc(Count)),
data.table = diamondsDT[cut != "Fair", 
                        list(AvgPrice = mean(price),
                             MedianPrice = as.numeric(median(price)),
                             Count = .N), by = cut][order(-Count)])[1:4]

এই সমস্যাটিতে এটি ডেটা.ট্যাবলটি dplyr এর চেয়ে 2.4x গতিযুক্ত ডেটা.ট্যাবল ব্যবহার করে বলে মনে হচ্ছে:

        test replications elapsed relative
2 data.table          100    2.39    1.000
1      dplyr          100    5.77    2.414

পলিমারেজের মন্তব্যের ভিত্তিতে সংশোধিত


4
microbenchmarkপ্যাকেজটি ব্যবহার করে , আমি দেখতে পেলাম যে ওপির dplyrকোডটি মূল (ডেটা ফ্রেম) সংস্করণে চালানো diamonds0.05 সেকেন্ডের মাঝারি সময় নিয়েছে, যখন diamondsডেটা টেবিলে রূপান্তরিত হওয়ার পরে এটি 0.024 সেকেন্ডের মধ্যবর্তী সময় নেয় । রানিং জি গ্রোথেন্ডিকের data.tableকোডটি 0.013 সেকেন্ড সময় নিয়েছিল। আমার সিস্টেমে অন্তত, এটা দেখে মনে হচ্ছে dplyrএবং data.tableএকই কর্মক্ষমতা সম্পর্কে আছে। কিন্তু dplyrযখন ডেটা ফ্রেমটি প্রথম কোনও ডাটা টেবিলটিতে রূপান্তরিত হয় তখন কেন ধীর হবে ?
eipi10

প্রিয় জি। গ্রোথেন্ডিক, এটি দুর্দান্ত। আমাকে এই বেঞ্চমার্ক ইউটিলিটিটি দেখানোর জন্য আপনাকে ধন্যবাদ। বিটিডাব্লু আপনি dplyr এর বিন্যাস (desc (গণনা) এর সমতুল্যতা তৈরি করার জন্য ডেট্যাটেবল সংস্করণে [অর্ডার (-শক্তি)] ভুলে গেছেন। এটি যুক্ত করার পরে, ডেটাটেবলটি এখনও প্রায় x1.8 দ্বারা (2.9 এর পরিবর্তে) দ্রুত হয়।
পলিমারেজ

@ eipi10 আপনি এখানে ডেটেবল সংস্করণ দিয়ে আবার আপনার বেঞ্চটি পুনরায় চালু করতে পারেন (শেষ ধাপে desc গণনা অনুসারে বাছাই করা): হীরা ডিডি [কাট! = "ফেয়ার", তালিকা (অ্যাভিজিপ্রাইস = গড় (দাম), মেডিয়ানপ্রাইস = আসনামিক (মিডিয়ান (দাম)), গণনা =। এন), দ্বারা = কাটা] [অর্ডার (-শক্তি)]
পলিমারেজ

এখনও 0.013 সেকেন্ড। অর্ডারিং অপারেশনটি খুব কম সময়ই নেয় কারণ এটি কেবলমাত্র চূড়ান্ত সারণীকে পুনরায় অর্ডার করছে, যার কেবল চারটি সারি রয়েছে।
eipi10

4
Dplyr সিনট্যাক্স থেকে ডেটা টেবিল সিনট্যাক্সে রূপান্তর করার জন্য কিছু স্থির ওভারহেড রয়েছে, সুতরাং এটি বিভিন্ন ধরণের সমস্যার আকারের চেষ্টা করে দেখার মতো। এছাড়াও আমি সম্ভবত dplyr এ সর্বাধিক দক্ষ ডেটা টেবিল কোডটি প্রয়োগ না করেছি; প্যাচগুলি সর্বদা স্বাগত জানানো হয়
হ্যাডলি

22

আপনার প্রশ্নের উত্তর দিতে:

  • হ্যাঁ, আপনি ব্যবহার করছেন data.table
  • তবে আপনি খাঁটি data.tableসিনট্যাক্সের মতো দক্ষতার সাথে নয়

dplyrসিনট্যাক্স চান তাদের জন্য অনেক ক্ষেত্রে এটি গ্রহণযোগ্য সমঝোতা হবে যদিও এটি সম্ভবত dplyrসরল ডেটা ফ্রেমের চেয়ে ধীর হবে ।

একটি বড় কারণ মনে হয় গ্রুপিংয়ের সময় dplyrএটি data.tableডিফল্টরূপে অনুলিপি করে । বিবেচনা করুন (মাইক্রোবেঞ্চমার্ক ব্যবহার করে):

Unit: microseconds
                                                               expr       min         lq    median
                                diamondsDT[, mean(price), by = cut]  3395.753  4039.5700  4543.594
                                          diamondsDT[cut != "Fair"] 12315.943 15460.1055 16383.738
 diamondsDT %>% group_by(cut) %>% summarize(AvgPrice = mean(price))  9210.670 11486.7530 12994.073
                               diamondsDT %>% filter(cut != "Fair") 13003.878 15897.5310 17032.609

ফিল্টারিং তুলনীয় গতির, কিন্তু গ্রুপিং হয় না। আমি বিশ্বাস করি অপরাধী এই লাইনটিতে dplyr:::grouped_dt:

if (copy) {
    data <- data.table::copy(data)
}

যেখানে copyডিফল্ট TRUE(এবং সহজেই মিথ্যাতে বদলে যেতে পারে না যা আমি দেখতে পাচ্ছি)। এটি সম্ভবত 100% পার্থক্যের জন্য অ্যাকাউন্ট করে না, তবে সাধারণ ওভারহেড একাকী diamondsকোনও কিছুর উপর সম্পূর্ণ পার্থক্য নয়।

বিষয়টি হ'ল ধারাবাহিক ব্যাকরণের dplyrজন্য দুটি গ্রুপে গ্রুপিং করা হয় in এটি প্রথমে গ্রুপগুলির সাথে মেলে মূল ডেটা টেবিলের একটি অনুলিপিতে কীগুলি সেট করে এবং কেবল পরে এটি গোষ্ঠী করে। data.tableসর্বাধিক রেজাল্ট গ্রুপের জন্য কেবল মেমরি বরাদ্দ করে, যা এক্ষেত্রে মাত্র এক সারি, যাতে মেমরি কত বরাদ্দ করা দরকার তার মধ্যে একটি বড় পার্থক্য তৈরি করে।

এফওয়াইআই, যদি কেউ যত্নশীল হন তবে আমি এটি treeprof( install_github("brodieg/treeprof")), পরীক্ষামূলক (এবং এখনও খুব বেশি আলফা) Rprofআউটপুটের জন্য ট্রি ভিউয়ার ব্যবহার করে পেয়েছি :

এখানে চিত্র বর্ণনা লিখুন

নোট করুন উপরেরটি বর্তমানে কেবল ম্যাক এএফএইচ-এ কাজ করে। এছাড়াও, দুর্ভাগ্যক্রমে, Rprofপ্রকারের কলগুলি packagename::funnameবেনামে রেকর্ড করে রাখে যাতে এটি প্রকৃতপক্ষে কোনও এবং সমস্ত datatable::ভিতরে থাকা কল হতে পারেgrouped_dt দায়বদ্ধ যে , তবে দ্রুত পরীক্ষার মাধ্যমে এটি দেখে মনে datatable::copyহচ্ছে এটি সবচেয়ে বড়।

এটি বলেছিল, আপনি দ্রুত দেখতে পারবেন কীভাবে [.data.tableকলটির চারপাশে এত বেশি ওভারহেড নেই , তবে গ্রুপিংয়ের জন্য একটি পৃথক পৃথক শাখাও রয়েছে।


সম্পাদনা : অনুলিপি নিশ্চিত করতে:

> tracemem(diamondsDT)
[1] "<0x000000002747e348>"    
> diamondsDT %>% group_by(cut) %>% summarize(AvgPrice = mean(price))
tracemem[0x000000002747e348 -> 0x000000002a624bc0]: <Anonymous> grouped_dt group_by_.data.table group_by_ group_by <Anonymous> freduce _fseq eval eval withVisible %>% 
Source: local data table [5 x 2]

        cut AvgPrice
1      Fair 4358.758
2      Good 3928.864
3 Very Good 3981.760
4   Premium 4584.258
5     Ideal 3457.542
> diamondsDT[, mean(price), by = cut]
         cut       V1
1:     Ideal 3457.542
2:   Premium 4584.258
3:      Good 3928.864
4: Very Good 3981.760
5:      Fair 4358.758
> untracemem(diamondsDT)

এই দুর্দান্ত, ধন্যবাদ। অভ্যন্তরীণ ডেটা অনুলিপি পদক্ষেপের কারণে এর অর্থ কি, dplyr :: group_by () খাঁটি ডেটাটেবল সিনট্যাক্সের তুলনায় মেমরির প্রয়োজন দ্বিগুণ করবে? মানে যদি আমার ডেটাটেবল অবজেক্টের আকারটি 1 গিগাবাইট হয় এবং আমি dplyr শৃঙ্খলিত সিনট্যাক্সটি মূল পোস্টের মতো ব্যবহার করি। ফলাফল পেতে আমার কমপক্ষে 2 জিবি ফ্রি মেমরি লাগবে?
পলিমারেজ

4
আমি দেব সংস্করণে এটি স্থির করেছি বলে মনে হচ্ছে?
hadley

@ হ্যাডলি, আমি সিআরএএন সংস্করণ থেকে কাজ করছিলাম। দেবের দিকে তাকানো দেখে মনে হচ্ছে আপনি বিষয়টি আংশিকভাবে সম্বোধন করেছেন, তবে আসল অনুলিপিটি (পরীক্ষিত হয়নি, কেবল আর / গ্রুপ-ডিটি.আর.-র লাইন সি (২০, ৩০:৩২) দেখেছেন এটি সম্ভবত এখন দ্রুত, তবে আমি ধীর পদক্ষেপের অনুলিপি
দিচ্ছি

4
আমি ডেটা.টিটেবেলে অগভীর অনুলিপি ফাংশনের জন্যও অপেক্ষা করছি; ততক্ষণে আমি দ্রুত থেকে নিরাপদ থাকা ভাল বলে মনে করি।
হ্যাডলি

2

আপনি এখন dtplyr ব্যবহার করতে পারেন , যা পরিশ্রমের অংশ । এটি আপনাকে যথারীতি dplyr শৈলী বিবৃতি ব্যবহার করতে দেয় তবে অলস মূল্যায়ন ব্যবহার করে এবং আপনার বিবৃতিগুলি ডুডের নীচে ডেটা.ট্যাবল কোডে অনুবাদ করে। অনুবাদে ওভারহেডটি ন্যূনতম, তবে আপনি ডেটা.টিবিলের বেশিরভাগ সুবিধা উপভোগ করেন if সরকারী Git রেপো এ আরো বিস্তারিত এখানে এবং tidyverse পৃষ্ঠা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.