Этот код создает DT::datatable(), который возвращает все строки, соответствующие «mazda» или «datsun».
library(DT)
datatable(
mtcars,
filter = list(position = 'none', clear = TRUE),
options = list(
search = list(regex = TRUE, caseInsensitive = TRUE, search = 'mazda|datsun'),
pageLength = 5
)
)
Поэтому я ожидаю, что этот код вернет все строки, соответствующие «хорошему» или «идеальному». Но оно соответствует только «идеалу»:
datatable(
ggplot2::diamonds |> head(),
filter = list(position = 'none', clear = TRUE),
options = list(
search = list(regex = TRUE, caseInsensitive = TRUE, search = 'ideal|good'),
pageLength = 5
)
)
Что здесь может быть не так?
По какой-то причине я могу воспроизвести это и решить с помощью (ideal|good).
@WiktorStribiżew оба набора данных включены в стандарт R
То же поведение с tibble(name = stringr::fruit) и fruit|berry. Он соответствует только fruit без скобок, но соответствует fruit и berry внутри.
@WiktorStribiżew пакет DT не является частью tidyverse: tidyverse.org/packages
Дело не в том, какую часть того, что это такое, использует ОП tidyverse
Проблема не имеет ничего общего с tidyverse, и на самом деле ОП даже не использует синтаксис tidyverse. Проблема заключается в DT::datatable и столкновении интересов между regex и smart. Удалим лишний вызов tidyverse lib.
И, кстати, вообще не понимают отрицательное/закрытое голосование, совершенно допустимый репрекс с действительно странным поведением, которое не имеет смысла на первый взгляд и требует некоторого понимания базовой библиотеки JavaScript, чтобы понять проблему.
Приложение: ок diamonds — это набор данных ggplot2 (думал, что он есть в базе R) — добавлена ссылка.





Вам необходимо отключить опцию smart (по какой-то неясной причине она работает для mtcars, но, как согласно документации, вы всегда должны отключать smart при использовании регулярного выражения):
library(dplyr)
library(DT)
datatable(
ggplot2::diamonds |>
group_by(cut) |>
slice_sample(n = 2),
filter = list(position = 'none', clear = TRUE),
options = list(
search = list(regex = TRUE, caseInsensitive = TRUE, search = 'ideal|good',
smart = FALSE), ## disable the smart option
pageLength = 6
)
)
Что в
diamonds |> head()? Было ли это намеренно? Конечно,ideal|goodнаходитidealилиgoodи работает.