@ 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:“ <<-”
的参数数量错误
是否有办法在仍然定义此自定义行为的同时保留<<-
的原始行为?
答案 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"