не происходит векторизация stringr при сопоставлении первого элемента - PullRequest
0 голосов
/ 01 июля 2018

Я сталкиваюсь с чем-то странным, когда использую stringr и ищу pattern длины> 1. Я хочу в конечном итоге использовать 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

1 Ответ

0 голосов
/ 12 августа 2018

Как указал никола, если вы предоставите вектор строк для str_locate, он перезапустит аргументы. Вместо этого попробуйте использовать оператор OR (|). Попробуйте что-то вроде

str_locate(data$b, "new1|var1")

     start end
[1,]     1   4
[2,]     1   4
[3,]     1   4
[4,]     1   4
[5,]    NA  NA
[6,]    NA  NA
[7,]    NA  NA
[8,]    NA  NA 

Я думаю, это то, что вы ищете,

purrr::map(data, function(x)str_which(x, "new1|var1"))
$a
integer(0)

$b
[1] 1 2 3 4

$c
[1] 1 5
...