为<x <y <-z`定义`<<-`时的歧义

时间:2018-12-14 13:23:33

标签: r variable-assignment assignment-operator

@ g-grothendieck对this question的回答启发了我玩一些赋值函数(它们甚至有名字吗?),例如==<-><-

请参阅以下内容:

`><-` <- 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"
  

replace(e1,which(e1

有趣的是,x < y <- z调用<<-,即使未被覆盖。

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

x中的错误<10 <-42:“ <<-”

的参数数量错误

是否有办法在仍然定义此自定义行为的同时保留<<-的原始行为?

1 个答案:

答案 0 :(得分:2)

这似乎可行:

`<<-` <- 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"