你能在R中同时分配两个变量吗?

时间:2016-05-09 19:06:46

标签: r

我使用的例子是根据圆的半径(r)和圆弧的角度(θ)计算圆周围圆弧的长度和围绕圆弧的圆弧下面积。区域和长度都基于r和theta,您可以在python中同时计算它们。

在python中,我可以通过这样做同时分配两个值。

    from math import pi
    def circle_set(r, theta):
        return theta * r, .5*theta*r*r

    arc_len, arc_area = circle_set(1, .5*pi) 

在R中实现相同的结构给了我这个。

    circle_set <- function(r, theta){
        return(theta * r, .5 * theta * r *r)
        }

    arc_len, arc_area <- circle_set(1, .5*3.14)

但是会返回此错误。

  

arc_len,arc_area&lt; - circle_set(1,.5 * 3.14)

     

错误:“arc_len”中的意外','

有没有办法在R中使用相同的结构?

2 个答案:

答案 0 :(得分:4)

不,你不能在R中做到这一点(至少,不是在基础或任何我知道的包中)。

您最接近的可能是将对象分配给列表的不同元素。如果你真的想要,你可以使用list2env将列表元素放在一个环境中(例如,全局环境),或者使用attach使列表元素可访问,但我不认为你从这些方法中获得了很多。

如果您希望函数返回多个值,只需将它们放入列表中即可。另请参阅r - Function returning more than one value

您可以为相同值分配多个变量,如下所示。即使在这里,我认为代码是不寻常的,不太清楚,我认为这超过了简洁的任何好处。 (虽然我认为它清楚地表明所有变量都是相同的值......也许在正确的背景下它是有道理的。)

x <- y <- z <- 1
# the above is equivalent to
x <- 1
y <- 1
z <- 1

答案 1 :(得分:1)

正如格雷戈尔所说,没有办法完全按照你所说的那样做,而且他的方法很好,但你也可以用一个向量代表你的两个值,如下所示:

# Function that adds one value and returns a vector of all the arguments.
plusOne <- function(vec) {

  vec <- vec + 1
  return(vec)

}

# Creating variables and applying the function.
x <- 1
y <- 2
z <- 3
vec <- c(x, y, z)
vec <- plusOne(vec)

所以基本上你可以创建一个向量并使你的函数返回向量,这实际上是一次填充3个值。再一次,不是你想要的,只是一个建议。