我使用的例子是根据圆的半径(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中使用相同的结构?
答案 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个值。再一次,不是你想要的,只是一个建议。