Неопределенность `<< -` при определении его для `x <y <- z` - PullRequest
0 голосов
/ 14 декабря 2018

@ g-grothendieck ответ на этот вопрос вдохновил меня на игру с некоторыми функциями назначения, такими как ==<- или ><-.

См. Следующее:

`><-` <- function(e1,e2,value) replace(e1, e1 > e2, value)
x <- c(5,15)
x > 10 <- 42
x
# [1]  5 42

Я также могу определить его для <:

`<<-` <- function(e1, e2, value) replace(e1, e1 < e2, value)
x <- c(5,15)
x < 10 <- 42
x
# [1] 42 15

Но проблема в том, что теперь оператор <<- переопределен, и он больше не работает:

x <<- "hello"

Ошибка замены (e1, которая (e1

Интересно x < y <- z вызывает <<- дажекогда он не был перезаписан.

rm(`<<-`)
x < 10 <- 42

Ошибка в x <10 <- 42: неверное количество аргументов для "<< -" </p>

Будет лиспособ сохранить исходное поведение <<- при определении этого пользовательского поведения?

1 Ответ

0 голосов
/ 14 декабря 2018

Это похоже на работу:

`<<-` <- function(e1, e2, value){
  if(missing(value)) 
    eval.parent(substitute(.Primitive("<<-")(e1, e2)))
  else 
    replace(e1, e1 < e2,value)
}

x <- c(5,15)
x < 10 <- 42
x
# [1] 42 15

x <<- "hello"
x
# [1] "hello"
...