r - উপস - সেটের প্রতীক




`` `উপসেট` এর চেয়ে ভাল কেন? (2)

@ জেমস এর মন্তব্যগুলিতে এই প্রশ্নের উত্তরে উত্তরের কথা বলা হয়েছে, এটি subset বিপদগুলির হেডলি উইকহ্যামের (এবং এর মতো কাজ) একটি চমৎকার ব্যাখ্যা নির্দেশ করে [here] । এটা পড়তে যান!

এটি একটি সামান্য দীর্ঘ পাঠ্য, তাই এটি উদাহরণস্বরূপ এখানে ব্যবহার করা সহায়ক হতে পারে যে হাদলে ব্যবহার করে এমনটি সবচেয়ে সরাসরি "কী ভুল হতে পারে?" এর প্রশ্নটি ঠিক করে।

হ্যডলি নিম্নলিখিত উদাহরণটি প্রস্তাব করে: ধরুন আমরা উপসেট করতে চাই এবং তারপরে নিম্নলিখিত ফাংশন ব্যবহার করে একটি ডেটা ফ্রেম পুনর্বিন্যাস করতে চাই:

scramble <- function(x) x[sample(nrow(x)), ]

subscramble <- function(x, condition) {
  scramble(subset(x, condition))
}

subscramble(mtcars, cyl == 4)

এটি ত্রুটি ফেরত দেয়:

Eval ত্রুটি (expr, envir, enclos): বস্তু 'সিল' পাওয়া যায় নি

কারণ আর আর "জানেন না" নামক বস্তুটি কোথায় খুঁজে পাওয়া যায়। তিনি বিশ্বব্যাপী পরিবেশে 'সিল' নামে একটি বস্তুর সুযোগও ঘটতে পারে এমন সত্যিকারের বিদ্বেষপূর্ণ উপাদানগুলিও নির্দেশ করে:

cyl <- 4
subscramble(mtcars, cyl == 4)

cyl <- sample(10, 100, rep = T)
subscramble(mtcars, cyl == 4)

(তাদের চালান এবং নিজের জন্য দেখুন, এটা বেশ পাগল।)

যখন আমি একটি ডেটা.ফ্রেম ফিল্টার করতে চাই, অর্থাত, কিছু শর্ত পূরণ করে এমন সারি বের কর, আমি subset ফাংশনটি ব্যবহার করতে পছন্দ করি:

subset(airquality, Month == 8 & Temp > 90)

বরং [ ফাংশন:

airquality[airquality$Month == 8 & airquality$Temp > 90, ]

আমার পছন্দ জন্য দুটি প্রধান কারণ আছে:

  1. আমি কোড বাম থেকে ডান, ভাল পড়া সার্চ। এমনকি যারা R সম্পর্কে কিছু জানেন না তারা কি subset বিবৃতিটি করছে তা জানাতে পারে।

  2. কারণ কলাম select অভিব্যক্তি ভেরিয়েবল হিসাবে উল্লেখ করা যেতে পারে, আমি কয়েক কীস্ট্রোক সংরক্ষণ করতে পারেন। উপরে আমার উদাহরণে, আমি শুধুমাত্র subset সঙ্গে একবার airquality টাইপ ছিল, কিন্তু তিনবার [

তাই আমি সর্বত্র subset ব্যবহার করে সুখী জীবনযাপন করছিলাম কারণ এটি ছোট এবং ভালভাবে পড়ছে, এমনকি আমার সহকর্মী আর কোডারদের পক্ষে এটির সৌন্দর্যকে সমর্থন করে। কিন্তু গতকাল আমার দুনিয়া ভেঙ্গে গেছে। subset ডকুমেন্টেশন পড়ার সময়, আমি এই বিভাগটি লক্ষ্য করি:

সতর্কতা

এটি একটি সুবিধার্থে ফাংশন ইন্টারেক্টিভ ব্যবহার উদ্দেশ্যে উদ্দেশ্যে। প্রোগ্রামিংয়ের জন্য স্ট্যান্ডার্ড সাবসেটিং ফাংশনগুলি ব্যবহার করা ভালো, [এবং বিশেষ করে যুক্তি উপসেটের অ-মানক মূল্যায়নটি অপ্রত্যাশিত পরিণতি হতে পারে।

কেউ কি লেখক মানে বোঝাতে সাহায্য করতে পারে?

প্রথমত, তারা " ইন্টারেক্টিভ ব্যবহারের জন্য " এর অর্থ কী বলে? আমি জানি যে কোন ইন্টারঅ্যাক্টিভ সেশনটি, ব্যাচ মোডে চলমান স্ক্রিপ্টের বিরোধিতা করে তবে আমি কোন পার্থক্যটি করা উচিত তা দেখতে পাচ্ছি না।

তারপরে, আপনি কি " যুক্তি উপাত্তের অ-মানক মূল্যায়ন মূল্যায়ন " এবং এটি বিপজ্জনক কেন ব্যাখ্যা করতে পারেন, সম্ভবত একটি উদাহরণ সরবরাহ করতে পারেন?


এছাড়াও [ দ্রুত:

require(microbenchmark)        
microbenchmark(subset(airquality, Month == 8 & Temp > 90),airquality[airquality$Month == 8 & airquality$Temp > 90,])
    Unit: microseconds
                                                           expr     min       lq   median       uq     max neval
                     subset(airquality, Month == 8 & Temp > 90) 301.994 312.1565 317.3600 349.4170 500.903   100
     airquality[airquality$Month == 8 & airquality$Temp > 90, ] 234.807 239.3125 244.2715 271.7885 340.058   100




r-faq