Hoặc sử dụng fixed = TRUE
nếu bạn muốn kết hợp chuỗi thực tế (regex
lessly):
v <- sample(c("nitrogen", "potassium", "hidrogen"), size = 100, replace = TRUE, prob = c(.8, .1, .1))
grep("nitrogen", v, fixed = TRUE)
# [1] 3 4 5 6 7 8 9 11 12 13 14 16 19 20 21 22 23 24 25
# [20] 26 27 29 31 32 35 36 38 39 40 41 43 44 46 47 48 49 50 51
# [39] 52 53 54 56 57 60 61 62 65 66 67 69 70 71 72 73 74 75 76
# [58] 78 79 80 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96 97
# [77] 98 99 100
Dunno về vấn đề tốc độ, tôi thích kiểm tra và tuyên bố rằng phương pháp A nhanh hơn phương pháp B, nhưng theo lý thuyết, ít nhất là từ kinh nghiệm của tôi, lập chỉ mục/toán tử nhị phân phải là nhanh nhất, vì vậy tôi bỏ phiếu cho @ Dason's tiếp cận. Cũng lưu ý rằng regex
es là luôn luôn chậm hơn fixed = TRUE
grep
ing.
Một bằng chứng nhỏ được đính kèm dưới đây. Lưu ý rằng đây là một thử nghiệm lame, và system.time
nên được đặt bên trong replicate
để có được (nhiều hơn) sự khác biệt chính xác, bạn nên đưa ra ngoài một tài khoản, vv Nhưng chắc chắn điều này chứng minh rằng bạn nên sử dụng which
! =)
(a0 <- system.time(replicate(1e5, grep("^nitrogen$", v))))
# user system elapsed
# 5.700 0.023 5.724
(a1 <- system.time(replicate(1e5, grep("nitrogen", v, fixed = TRUE))))
# user system elapsed
# 1.147 0.020 1.168
(a2 <- system.time(replicate(1e5, which(v == "nitrogen"))))
# user system elapsed
# 1.013 0.020 1.033
Vì vậy, bạn chỉ muốn chỉ mục/chỉ mục của các giá trị chính xác bằng "nitơ"? Có 'mà (varnames ==" nitơ ")' cung cấp cho bạn những gì bạn muốn? – Dason
Cảm ơn bạn rất nhiều đó là chính xác những gì tôi cần. – sabsirro
Dason: bạn có thể làm cho bình luận của bạn một câu trả lời để Sabsirro có thể chấp nhận? –