【问题标题】:ambiguity of `<<-` when defining it for `x < y <- z`为`x < y <- z`定义时`<<-`的歧义
【发布时间】:2019-05-15 18:40:11
【问题描述】:

@g-grothendieck 对this question 的回答启发了我尝试一些赋值函数,例如==&lt;-&gt;&lt;-

请参阅以下内容:

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

我也可以为&lt; 定义它:

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

但问题是现在 &lt;&lt;- 运算符被重新定义,这不再起作用了:

x <<- "hello"

替换错误(e1, which(e1

有趣的是x &lt; y &lt;- z 调用&lt;&lt;-,即使它没有被覆盖。

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

x 的参数数量不正确

是否有一种方法可以在保留 &lt;&lt;- 的原始行为的同时仍定义此自定义行为?

【问题讨论】:

  • "但问题是现在

标签: r variable-assignment assignment-operator


【解决方案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"

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多