Если я определяю список следующим образом: list(param = "value1")
, то результатом будет:
> list(param = "value1")
#$param
#[1] "value1"
Я пытаюсь определить новый оператор %!=%
, чтобы я мог определить список следующим образом: list(param %!=% "value1")
и я хочу, чтобы результат был:
> list(param %!=% "value1")
#$param.ne
#[1] "value1"
В качестве фона я пишу оболочку R для RESTful API, которая извлекает данные из базы данных. Когда вы делаете запрос, вы можете указать API возвращать результаты, которые соответствуют значению параметра param1 = value1
— это будет включено непосредственно в строку запроса запроса GET.
Однако API также позволяет получать результаты, которые НЕ соответствуют значению параметра: param != value1
. Ввод !=
в строку запроса запроса представляет собой проблему. API предназначен для использования param.ne = value1
вместо param != value1
.
В настоящее время я пытаюсь сделать это, используя некоторые элементы нестандартной оценки:
`%!=%` = function(query, value) {
query = deparse(substitute(query))
query = paste0("`", query, ".ne", "`", "=", "\"", value, "\"")
parse(text = query)
}
Эта функция определит тип запроса (param
, param2
, param3
и т. д.), используя нестандартную оценку, преобразует запрос в строку, добавит .ne
в конец и отправит его обратно в виде выражения.
Однако, если я попытаюсь сделать list(eval(param1 %!=% "value1"))
, результат будет таким:
> list(eval(address %!=% "value1"))
#[[1]]
#[1] "value1"
Есть ли простой способ добиться вышеизложенного?
РЕДАКТИРОВАТЬ: В свете сообщений ниже, дополнительный вопрос:
Можно ли как-то адаптировать вышеизложенное для работы с функцией, имеющей параметр по умолчанию? Например:
newlist <- function(param1 = "default1", param2 = "default2", ...)
и я хотел сделать что-то вроде
newlist(param2 = "non-default", param3 %!=% "stuff")
с результатом, являющимся списком с param1 = "default1"
, param2 = "non-default"
и param3.ne = "stuff"
?