O utilice fixed = TRUE
si desea hacer coincidir cadena real (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
No sé lo de velocidad, me gusta probar cosas y afirmar que el enfoque A es más rápido que el enfoque B, pero en teoría, al menos según mi experiencia, los operadores de indexación/binarios deberían ser los más rápidos, así que voto por @Dason enfoque. También tenga en cuenta que regex
es son siempre más lento que fixed = TRUE
grep
ing.
Se adjunta una pequeña prueba. Tenga en cuenta que esta es una prueba coja, y system.time
debe colocarse dentro de replicate
para obtener (más) diferencias precisas, debe tomar valores atípicos en una cuenta, etc. ¡Pero seguramente esto demuestra que debe usar 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
¿Entonces solo desea el índice/índices de los valores que son exactamente iguales a "nitrógeno"? ¿'Which (varnames ==" nitrogen ")' te da lo que quieres? – Dason
Muchas gracias, eso es exactamente lo que necesito. – sabsirro
Dason: ¿puedes responder a tu comentario para que Sabsirro pueda aceptarlo? –