如果您想匹配实际字符串(无需使用正则表达式),可以使用 fixed = TRUE
:
v <- sample(c("nitrogen", "potassium", "hidrogen"), size = 100, replace = TRUE, prob = c(.8, .1, .1))
grep("nitrogen", v, fixed = TRUE)
不太清楚速度问题,我喜欢测试并声称方法A比方法B更快,但从我的经验来看,至少在理论上,索引/二进制运算符应该是最快的,所以我投票支持@Dason的方法。另请注意,正则表达式总是比fixed=TRUE的grep()慢。
下面附有一些证明。请注意,这是一个简单的测试,应该将system.time放置在replicate内以获得(更多)准确的差异,您应该考虑异常值等。但是这肯定证明了您应该使用which!=)
(a0 <- system.time(replicate(1e5, grep("^nitrogen$", v))))
(a1 <- system.time(replicate(1e5, grep("nitrogen", v, fixed = TRUE))))
(a2 <- system.time(replicate(1e5, which(v == "nitrogen"))))
which(varnames == "nitrogen")
是否能满足你的需求? - Dason