【发布时间】:2018-07-01 05:08:36
【问题描述】:
我在使用stringr 并搜索长度> 1 的pattern 时遇到了一些奇怪的事情。我想最终将str_which 与purrr::map() 一起使用:
searcher <- c("new1", "var1")
purrr::map(data, function(x), any(str_which(x, searcher)))
样本数据
library(stringr)
data <- dplyr::tibble(
a = 1:8,
b = rep(paste0("var", 1:2), each = 4),
c = rep(paste0("new", 1:4), 2))
str_which(data$c, c("new1", "var1"))
#[1] 1 5
str_which(data$c, c("var1", "new1"))
#integer(0)
str_which(data$b, c("var1", "new1"))
#[1] 1 3
str_which(data$b, c("new1", "var1"))
#[1] 2 4
str_which(data$a, c(2, "var1"))
#integer(0)
str_which(data$a, c(3, "var1"))
#[1] 3
此外,我注意到str_locate 的奇怪行为:
str_locate(data$b, c("new1", "var1"))
# start end
#[1,] NA NA
#[2,] 1 4
#[3,] NA NA
#[4,] 1 4
#[5,] NA NA
#[6,] NA NA
#[7,] NA NA
#[8,] NA NA
【问题讨论】:
-
str_which是矢量化的,这意味着较短的参数会被回收。所以str_which(data$c, c("new1", "var1"))是这样的:data$c[1]和"new1",data$c[2]和"var1",data$c[3]和"new1"(看到回收了吗?),data$c[4]和"var1"等等。