R中的双向赋值运算符

时间:2018-11-10 05:36:45

标签: r

是否有R函数双向分配变量?例如,让<->代表双向赋值运算符。

a <-> b
a
> b
b
> a

2 个答案:

答案 0 :(得分:4)

一个人可以定义如下内容:

`%<->%` <- function(x,y){
    t <- y
    assign(deparse(substitute(y)), x, envir=parent.frame())
    assign(deparse(substitute(x)), t, envir=parent.frame()) 
}
a <- 1
b <- 2
a %<->% b
a
[1] 2
b
[1] 1

答案 1 :(得分:2)

这样的运算符对R的功能方式毫无意义:

来自Hadley Wickham's book Advanced R, section "Binding basics"

  

考虑以下代码:

     

x <- c(1, 2, 3)

     

[...]这段代码在做两件事:

     
      
  • 它正在创建一个对象,值的向量,c(1, 2, 3)
  •   
  • 并将该对象绑定到名称x
  •   

例如,当您运行时:

a <- 1

您正在创建一个具有一个元素的数字矢量,并将其绑定到名称a

a <-> b

将名称彼此绑定,这在R中没有意义。


还请注意以下事项:

a <- 1
b <- a
b
# [1] 1

您将获得1而不是a作为输出,因为您创建了另一个与值b的数字向量的绑定(1)。而且,当您运行b时,输出是与其绑定的对象(1),而不是该对象绑定的其他名称。

注意:Hadley在他的书中用图表非常清楚地解释了这一切。