Храните и используйте операторы по команде - PullRequest
0 голосов
/ 14 мая 2019

Как (и можно) использовать разные операторы в команде if и else?

x <- as.numeric(c(1,1,4,5,6,7,8))

if(mean(x) < 3){operator.is <- <}else{operator.is <- >}

sub <- subset(x, x operator.is 2)

#expected results
sub
[1] 3 4 5 6 7 8

Я хочу сохранить оператор в "operator.is", основываясь на операторе if. Тем не менее, я не могу сохранить оператор и использовать его в функции подмножества. Позже захотим использовать этот оператор для подмножества. Без этого мне нужно будет скопировать и вставить весь код, чтобы использовать другой оператор. Есть ли какой-нибудь элегантный и простой способ решить эту проблему?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 14 мая 2019
x <- as.numeric(c(1,1,4,5,6,7,8))

if(mean(x) < 3){`%my_op%` <- `<`}else{`%my_op%` <- `>`}

sub <- subset(x, x %my_op% 2)
sub
##[1] 4 5 6 7 8

«Следует помнить при определении своих собственных инфиксных операторов, что они должны начинаться и заканчиваться на%. Окружите его обратной галочкой (`) в определении функции и избегайте любых специальных символов ».

от https://www.datamentor.io/r-programming/infix-operator/

лучше следовать примеру @Oliver и просто

x <- as.numeric(c(1,1,4,5,6,7,8))

if(mean(x) < 3){operator.is <- `<`}else{operator.is <- `>`}

sub <- subset(x, operator.is(x,2))
sub
##[1] 4 5 6 7 8
0 голосов
/ 14 мая 2019

операторам может быть присвоен знак%:

`%op%` = `>`

vector <- c(1:10)

vector2 <- subset(vector, vector %op% 5)

В вашем случае:

x <- as.numeric(c(1,1,4,5,6,7,8))

if(mean(x) < 3){`%operator.is%` <- `<`}else{`%operator.is%` <- `>`}

sub <- subset(x, x %operator.is% 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...