Этот код создает 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
и работает.