Если у меня есть функция f
:
f <- function(a = character(0),
b = character(0),
c = character(0),
condition = "a + b + c") {
if(condition == "a + b + c")
return(union(union(a, b), c))
if(condition == "(a * b) + c")
return(union(intersect(a, b), c))
if(condition == "(a - b) + c")
return(union(setdiff(a, b), c))
if(condition == "(a - b) - c")
return(setdiff(setdiff(a, b), c))
# etc...
}
f(a = c('1', '2', '3'),
b = c('2', '3', '4'),
c = c('3', '4'),
condition = "a + b + c")
#> [1] "1" "2" "3" "4"
f(a = c('1', '2'),
b = c('2', '3'),
c = c('2', '3', '4'),
condition = "(a * b) + c")
#> [1] "2" "3" "4"
f(a = c('1', '2'),
b = c('2', '3'),
c = c('2', '3', '4'),
condition = "(a - b) - c")
#> [1] "1"
Как решить проблему кодирования этого аргумента condition
, который должен определять выражение операции набора для входных векторов?
В моем примере я использовал простые строки только для иллюстрации предполагаемого поведения, однако это решение не хорошо масштабируется.Нужно ли использовать языковой объект (?!) ...
Мне нужен простой способ:
- , указав это выражение (строка может быть хорошим объектом?);
- как-то проанализировать его и убедиться, что оно преобразуется в допустимое выражение операции набора;
- Вычислить результат, применив вышеупомянутое выражение операции набора.