কোনও ভেক্টরটিতে প্রদত্ত একটি উপাদান রয়েছে কিনা তা পরীক্ষা করুন


518

কোনও ভেক্টর প্রদত্ত মান রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?


38
কখনও কখনও আমি নিজেকে জিজ্ঞাসা করি কেন আর আর শব্দটি ব্যবহারকারীদের সহজ করার জন্য ব্যবহার করে না
গ্রেগ 121

12
বিবেচনা করুন যে "ইন" "কনটা (ইন) এস" এর মধ্যে রয়েছে; আমি তর্ক করতে চাই যে "এ" এই প্রেক্ষাপটে একটি যথেষ্ট সংক্ষিপ্ত প্রতিযোগী হয়
hedgedandlevered

1
সম্ভবত flanking- %চিহ্নগুলি যোগ করার সাথে। শব্দটি inলুপ নির্মাণে আর ব্যবহারের জন্য একটি সংরক্ষিত শব্দ।
আইআরটিএফএম

@ গ্রেগ 121 ডিপি্লায়ার ইতিমধ্যে একটি ফাংশন রয়েছে , তবে এটি একটি ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়: একটি ডেটা ফ্রেমে কলাম নির্বাচন করতে। উদাহরণস্বরূপ select(iris, contains("etal"))
পল রাউজিউক্স

প্রদত্ত নির্ভুলতার সাথে প্রকৃত মূল্যবান সংখ্যার জন্য এটি করার কোনও সংক্ষিপ্ত উপায় আছে?
এমলেট

উত্তর:


500

উভয়ই match()(প্রথম উপস্থিতি ফিরিয়ে দেয়) এবং %in%(একটি বুলিয়ান রিটার্ন দেয়) ফাংশনগুলি এর জন্য ডিজাইন করা হয়েছে।

v <- c('a','b','c','e')

'b' %in% v
## returns TRUE

match('b',v)
## returns the first location of 'b', in this case: 2

সমস্ত উপস্থিতি সম্পর্কে কি, প্রথম প্রথম না?
স্ট্যাটাসোর্সেস

আমি হয়তো একটু দেরি করে এসেছি। which(v, 'b')। যুক্তিগুলির ক্রমটি মনে করুন।
নিক্লাস মার্টশ

আপনার which(v, 'b')আমাকে একটি ত্রুটি বার্তা দেয়:> ত্রুটি যার মধ্যে (v, 'b'): '
যা'র

176

is.element() আরও পঠনযোগ্য কোড তৈরি করে এবং এর অনুরূপ %in%

v <- c('a','b','c','e')

is.element('b', v)
'b' %in% v
## both return TRUE

is.element('f', v)
'f' %in% v
## both return FALSE

subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE

6
আমি জানি ডকুমেন্টেশন বলে is.element(x, y) is identical to x %in% y। তবে, কেন জানি না, is.elementsপূর্ণসংখ্যা এবং %in%
সংখ্যাসমূহের

@ পোমার: আপনি এর উদাহরণ দিতে পারেন?
শৃঙ্খলা

@ পমবার ঠিক হয়ে গেছে?
ভ্যাসিলি 111

2
উচ্চতর পাঠযোগ্যতা is.element()বনাম %in%বিষয়গত হয়। একটি কেস তৈরি করা যেতে পারে যে একটি ইনফিক্স অপারেটর আরও পঠনযোগ্য কারণ এটি আর্গুমেন্টের ক্রমে অস্পষ্টতা দূর করে। apple in fruitবোঝায়, fruit in appleনা। is.element(apple, fruit)বা ফাংশন is.element(fruit, apple)বাস্তবায়নের উপর নির্ভর করে উভয়ই সঠিক হতে পারে is.element
রিলেমডডওয়েল

70

আমি আউটপুট উপর ভিত্তি করে বিকল্পগুলি গ্রুপ করব। সমস্ত উদাহরণের জন্য নিম্নলিখিত ভেক্টরটি ধরে নিন।

v <- c('z', 'a','b','a','e')

উপস্থিতি যাচাইয়ের জন্য:

%ভিতরে%

> 'a' %in% v
[1] TRUE

কোন ()

> any('a'==v)
[1] TRUE

is.element ()

> is.element('a', v)
[1] TRUE

প্রথম ঘটনা খুঁজে পাওয়ার জন্য:

ম্যাচ()

> match('a', v)
[1] 2

সূচকের ভেক্টর হিসাবে সমস্ত ঘটনা সন্ধানের জন্য:

যা ()

> which('a' == v)
[1] 2 4

লজিকাল ভেক্টর হিসাবে সমস্ত ঘটনা সন্ধান করার জন্য :

==

> 'a' == v
[1] FALSE  TRUE FALSE  TRUE FALSE

সম্পাদনা করুন: মন্তব্যে উল্লিখিত কারণে তালিকা থেকে গ্রেপ () এবং গ্রেপল () সরানো হচ্ছে


6
ইতিমধ্যে এবং এখানে ইতিমধ্যে মন্তব্য করা হয়েছে , grep()সঠিক মিলগুলি খুঁজে পেতে বা নিয়মিত এক্সপ্রেশন ব্যবহার করবেন না ।
উয়েউ

69

যে কোনও () ফাংশনটি পঠনযোগ্য কোডের জন্য তৈরি করে

> w <- c(1,2,3)
> any(w==1)
[1] TRUE

> v <- c('a','b','c')
> any(v=='b')
[1] TRUE

> any(v=='f')
[1] FALSE

9
সচেতন এই থেকে ভিন্নভাবে আচরণ করবে হউন %in%: any(1==NA)আয় NA, যেখানে 1 %in% NAআয় FALSE

@ ব্যবহারকারী3603486: any(1==NA, na.rm=TRUE)ফেরত দেয় FALSE
AkselA

36

আপনি %in%অপারেটরটি ব্যবহার করতে পারেন :

vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false

19

এছাড়াও "যা" হিসাবে ব্যবহার করা যেতে পারে এমন উপাদানগুলির অবস্থান সন্ধান করতে

pop <- c(3,4,5,7,13)

which(pop==13)

এবং লক্ষ্য ভেক্টরে অন্তর্ভুক্ত নেই এমন উপাদানগুলি সন্ধান করতে, কেউ এটি করতে পারেন:

pop <- c(1,2,4,6,10)

Tset <- c(2,10,7)   # Target set

pop[which(!(pop%in%Tset))]

whichআসলে এটি কখনও কখনও পছন্দনীয় হয় কারণ এটি আপনাকে সমস্ত মিলের অবস্থান দেয় (অ্যারে হিসাবে), বিপরীত match। যদিও স্ট্যাকওভারফ্লো.com
ফিজ

2
whichআপনি যদি কেবল উপাদানগুলি না খুঁজে পেতে চান তবে কেন বিরক্ত করবেন Tset? আপনি popসরাসরি সূচক করতে পারেন ; pop[!pop%in%Tset]
হাউশাল্টার

13

এই উদ্দেশ্যে আমি সত্যিই গ্রেপ () এবং গ্রেপল () পছন্দ করি।

গ্রেপ () পূর্ণসংখ্যার একটি ভেক্টর প্রদান করে, যা মিলগুলি কোথায় তা নির্দেশ করে।

yo <- c("a", "a", "b", "b", "c", "c")

grep("b", yo)
[1] 3 4

গ্রেপল () ম্যাচগুলির স্থানে "সত্য" সহ একটি যৌক্তিক ভেক্টর প্রদান করে।

yo <- c("a", "a", "b", "b", "c", "c")

grepl("b", yo)
[1] FALSE FALSE  TRUE  TRUE FALSE FALSE

এই ফাংশনগুলি কেস-সংবেদনশীল।


10
ডিফল্টরূপে, grepএটির প্রথম উপাদান হিসাবে একটি নিয়মিত অভিব্যক্তি গ্রহণ করে, তাই "b"ব্যবহার করুন ^e$বা যুক্ত করুন , fixed=TRUE) এর সাথে একটি সঠিক মিল করতে ।
রিইনারপোস্ট

10
নির্ভুল ম্যাচের জন্য রেজেক্স ব্যবহার করবেন না। এটি বিপজ্জনক এবং অপ্রত্যাশিত ফলাফল হতে পারে
ডেভিড আরেনবুর্গ

9
হ্যাঁ, এটি একটি ভয়ানক, খুব ভাল, খুব খারাপ ধারণা নয় - অদক্ষ এবং ভাঙ্গার গ্যারান্টিযুক্ত। উদাহরণস্বরূপ 'বি' না থাকলেও myvar <- 'blah'; grepl('b', myvar, fixed=TRUE)ফিরে আসবে । TRUEmyvar
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.