为`x < y <- z`定义时`<<-`的歧义
Posted
技术标签:
【中文标题】为`x < y <- z`定义时`<<-`的歧义【英文标题】:ambiguity of `<<-` when defining it for `x < y <- z` 【发布时间】:2019-05-15 18:40:11 【问题描述】:@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"
替换错误(e1, which(e1
有趣的是x < y <- z
调用<<-
,即使它没有被覆盖。
rm(`<<-`)
x < 10 <- 42
x 的参数数量不正确
是否有一种方法可以在保留 <<-
的原始行为的同时仍定义此自定义行为?
【问题讨论】:
"但问题是现在 【参考方案1】:这似乎有效:
`<<-` <- 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"
【讨论】:
以上是关于为`x < y <- z`定义时`<<-`的歧义的主要内容,如果未能解决你的问题,请参考以下文章