yeterli olacaktır Yoksa (lessly regex
) gerçek dize eşleştirmek istiyorsanız, fixed = TRUE
kullanın:
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
Hız sorunları hakkında Dunno, bir şeyleri test etmeyi seviyorum ve A yaklaşımının B yaklaşımından daha hızlı olduğunu iddia ediyorum, fakat teoride, en azından deneyimimden, indeksleme/ikili operatörler en hızlı olmalı, bu yüzden @ Dason'a oy veriyorum yaklaşım. Ayrıca, regex
eslerinin fixed = TRUE
grep
ing öğesinden her zaman daha yavaş olduğunu unutmayın.
Küçücük bir kanıt eklenmiştir. Bu bir topal test olduğunu ve system.time
replicate
içine koymak (daha) doğru farklılıklar almak için, bir hesap içine aykırı almak gerekir, vb Ama kesinlikle bu bir which
kullanmanız gerektiğini kanıtlıyor! =)
(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
Yani sadece "azot" tam olarak eşit değerlerin indeksini/endekslerini mi istiyorsunuz? Hangi (varnames == "azot") 'istediğinizi verir mi? – Dason
Çok teşekkür ederim, tam da ihtiyacım olan şey bu. – sabsirro
Dason: Yorumunuzu Sabsirro'nun kabul edebileceği bir cevap verebilir misiniz? –