Как сделать синтаксис фильтра R более удобным для пользователя?

В настоящее время я работаю над блестящим проектом R, который необходимо загрузить в набор данных и добавить критерии для фильтрации наблюдений.

Моя проблема заключается в том, что когда пользователь вводит «флаг = 1 и условие> = 2», следующее будет преобразовано в «флаг == 1 и условие> == 2», чтобы R мог его прочитать, что неверно и определенно показывает ошибку. Есть ли какая-либо функция/пакет, который может заставить пользователя, не являющегося пользователем R, ввести желаемое условие?

    .....if (input$criteria_ad == ""){
      dat <- dat0
    }else if (endsWith(file_ad$name, '.sas7bdat')){
      ad <- data.frame(setDT(read_sas(file_ad$datapath)))
      
      rep_str <- c('<='='<=','>='='>=','='='==','and'='&','or'='|')
      
      ad <- filter(ad, eval(parse(text = str_replace_all(input$criteria_ad, rep_str))))
      
      dat <- inner_join(dat0, ad, by ='ID')
    }......

Если вы используете Shiny, я думаю, что имеет смысл использовать виджет управления (например, ползунок), чтобы пользователи могли вводить критерии?

neilfws 11.01.2023 05:12

Спасибо neilfws, но пользователь предпочитает использовать более гибкий ввод, поскольку переменные в наборе данных разнообразны.

Elif Y 11.01.2023 05:13
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
0
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы должны использовать границы слов регулярных выражений.

С границами слов:

rep_str <- c('<='='<=','>='='>=','\\b=\\b'='==','and'='&','or'='|')
str_replace_all("flag=1 and condition>=2", rep_str)
# [1] "flag==1 & condition>=2"

Вы можете сделать это для всех, а не только для единственного числа = с

rep_str <- c('<='='<=','>='='>=','='='==','and'='&','or'='|')
names(rep_str) <- paste0("\\b", names(rep_str), "\\b")
rep_str
#  \\b<=\\b  \\b>=\\b   \\b=\\b \\band\\b  \\bor\\b 
#      "< = "      "> = "      "= = "       "&"       "|" 
str_replace_all("flag=1 and condition>=2", rep_str)
# [1] "flag==1 & condition>=2"

К вашему сведению, поскольку первые два элемента вашего rep_str не изменяются, мы можем опустить их из вектора.

Другие вопросы по теме