วิธีการตรวจสอบว่าเวกเตอร์มีค่าที่กำหนด?
%
- ลงชื่อนั่นคือ คำin
นี้เป็นคำสงวนในการใช้ R ในการสร้างวง
select(iris, contains("etal"))
เช่น
วิธีการตรวจสอบว่าเวกเตอร์มีค่าที่กำหนด?
%
- ลงชื่อนั่นคือ คำin
นี้เป็นคำสงวนในการใช้ R ในการสร้างวง
select(iris, contains("etal"))
เช่น
คำตอบ:
ทั้งฟังก์ชั่น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'): โต้แย้งว่า 'ซึ่ง' ไม่สมเหตุสมผล
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
is.element(x, y) is identical to x %in% y
ฉันรู้ว่าเอกสารกล่าวว่า แต่ฉันไม่รู้ว่าทำไมใช้is.elements
งานได้เมื่อผสมจำนวนเต็มและตัวเลขและ%in%
ไม่
is.element()
เทียบได้กับ%in%
ความรู้สึกส่วนตัว กรณีสามารถทำให้ผู้ดำเนินการมัดสามารถอ่านได้มากขึ้นเพราะมันกำจัดความคลุมเครือในลำดับของการขัดแย้ง apple in fruit
ทำให้รู้สึกfruit in apple
ไม่ is.element(apple, fruit)
หรือis.element(fruit, apple)
อาจถูกต้องขึ้นอยู่กับการใช้งานis.element
ฟังก์ชั่น
ฉันจะจัดกลุ่มตัวเลือกตามผลลัพธ์ สมมติว่าเวกเตอร์ต่อไปนี้เป็นตัวอย่างทั้งหมด
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
แก้ไข: การลบgrep ()และgrepl ()จากรายการด้วยเหตุผลที่กล่าวถึงในความคิดเห็น
ใด ๆ ()ฟังก์ชั่นทำให้การอ่านรหัส
> 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
any(1==NA, na.rm=TRUE)
FALSE
คุณสามารถใช้%in%
โอเปอเรเตอร์:
vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
นอกจากนี้เพื่อค้นหาตำแหน่งขององค์ประกอบ "ซึ่ง" สามารถใช้เป็น
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
คุณ แม้ว่านี่อาจจะไม่ใช่สิ่งที่ OP ร้องขอ แต่แตกต่างจากstackoverflow.com/questions/1169388/…
which
ถ้าคุณแค่ต้องการค้นหาองค์ประกอบที่ไม่อยู่ในนั้นTset
? คุณสามารถสร้างดัชนีpop
ได้โดยตรง pop[!pop%in%Tset]
ฉันชอบ grep () และ grepl () เพื่อจุดประสงค์นี้
grep () ส่งคืนเวกเตอร์ของจำนวนเต็มซึ่งระบุตำแหน่งที่ตรงกัน
yo <- c("a", "a", "b", "b", "c", "c")
grep("b", yo)
[1] 3 4
grepl () ส่งคืนโลจิคัลเวกเตอร์ที่มี "TRUE" ที่ตำแหน่งของการจับคู่
yo <- c("a", "a", "b", "b", "c", "c")
grepl("b", yo)
[1] FALSE FALSE TRUE TRUE FALSE FALSE
ฟังก์ชันเหล่านี้คำนึงถึงขนาดตัวพิมพ์
grep
จะใช้นิพจน์ทั่วไปเป็นองค์ประกอบแรกดังนั้นในการจับคู่ที่ตรงกัน"b"
ทั้งใช้^e$
หรือเพิ่ม, fixed=TRUE
)