genügen Oder fixed = TRUE
verwenden, wenn Sie tatsächlich string (regex
lessly) übereinstimmen soll:
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
Keine Ahnung über die Geschwindigkeitsprobleme, ich mag Sachen testen und dieser Ansatz A Anspruch ist schneller als Ansatz B, aber in der Theorie, zumindest aus meiner Erfahrung, Indexierung/Binäroperatoren sollten die schnellste sein, so dass ich stimme für @ Dason des Ansatz. Beachten Sie auch, dass regex
es sind immer langsamer als fixed = TRUE
grep
ing.
Ein kleiner Beweis unten angebracht. Beachten Sie, dass dies ein lahmer Test ist, und system.time
sollte innerhalb replicate
gesetzt wird (mehr) genaue Unterschiede zu erhalten, sollten Sie Ausreißer auf ein Konto übernehmen, etc. Aber sicherlich dies beweist, dass Sie which
verwenden sollen! =)
(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
Also wollen Sie nur den Index/Indizes der Werte, die genau "Stickstoff" gleich? Gibt 'was (varnames ==" stickstoff ")' dir was du willst? – Dason
Vielen Dank, das ist genau das, was ich brauche. – sabsirro
Dason: Kannst du deinen Kommentar so beantworten, dass Sabsirro das akzeptieren kann? –